private void pushFieldConduitOntoStack(String conduitFileName, InstructionBuilder builder) { builder.loadThis(); builder.getField(plasticClass.className, conduitFileName, FieldConduit.class); }
public void doBuild(InstructionBuilder builder) { builder.loadThis().getField(propertyTypeField).returnResult(); } });
@Override public void doBuild(InstructionBuilder builder) { builder.loadThis().getField(PlasticFieldImpl.this).returnResult(); } });
public void doBuild(InstructionBuilder builder) { builder.loadThis().getField(propertyGenericTypeField).returnResult(); } });
@Override public void doBuild(InstructionBuilder builder) { builder.loadThis().getField(delegateField); builder.checkcast(delegateType).returnResult(); } });
private void implementConstructor(ClassNode shimClassNode) { MethodNode mn = new MethodNode(ACC_PUBLIC, CONSTRUCTOR_NAME, NOTHING_TO_VOID, null, null); InstructionBuilder builder = newBuilder(mn); builder.loadThis().invokeConstructor(PlasticClassHandleShim.class).returnResult(); shimClassNode.methods.add(mn); }
@Override public void doBuild(InstructionBuilder builder) { // Load the field builder.loadThis().getField(field); builder.loadArguments(); invokeDelegateAndReturnResult(builder, field.getTypeName()); } });
@Override public void doBuild(InstructionBuilder builder) { builder.loadThis().getField(delegateField); builder.checkcast(delegateType).returnResult(); } });
private void createOverrideOfBaseClassImpl(MethodDescription methodDescription, MethodNode methodNode) { InstructionBuilder builder = newBuilder(methodDescription, methodNode); builder.loadThis(); builder.loadArguments(); builder.invokeSpecial(superClassName, methodDescription); builder.returnResult(); }
@Override public void doBuild(InstructionBuilder builder) { builder.loadThis().loadArgument(0); builder.putField(plasticClass.className, node.name, getTypeName()); builder.returnResult(); } });
/** * The first part of any implementation of get() or set(): invoke the navigation method * and if the result is null, return immediately. */ private void invokeNavigateMethod(InstructionBuilder builder) { builder.loadThis().loadArgument(0).invokeVirtual(navMethod); builder.dupe().when(Condition.NULL, RETURN_NULL); }
@Override public void doBuild(InstructionBuilder builder) { builder.loadThis().loadArgument(0); builder.putField(plasticClass.className, node.name, getTypeName()); builder.returnResult(); } });
private void createOverrideOfBaseClassImpl(MethodDescription methodDescription, MethodNode methodNode) { InstructionBuilder builder = newBuilder(methodDescription, methodNode); builder.loadThis(); builder.loadArguments(); builder.invokeSpecial(superClassName, methodDescription); builder.returnResult(); }
private MethodNode addShimGetAccessMethod() { String name = plasticClass.makeUnique(plasticClass.methodNames, "shim_get_" + node.name); MethodNode mn = new MethodNode(Opcodes.ACC_SYNTHETIC | Opcodes.ACC_FINAL, name, "()" + node.desc, null, null); InstructionBuilder builder = plasticClass.newBuilder(mn); builder.loadThis().getField(plasticClass.className, node.name, typeName).returnResult(); plasticClass.addMethod(mn); plasticClass.fieldTransformMethods.add(mn); return mn; }
private void invokeCallback(ConstructorCallback callback) { int index = staticContext.store(callback); // First, load the callback constructorBuilder.loadArgument(0).loadConstant(index).invoke(STATIC_CONTEXT_GET_METHOD).castOrUnbox(ConstructorCallback.class.getName()); // Load this and the InstanceContext constructorBuilder.loadThis().loadArgument(1); constructorBuilder.invoke(CONSTRUCTOR_CALLBACK_METHOD); }
private void invokeCallback(ConstructorCallback callback) { int index = staticContext.store(callback); // First, load the callback constructorBuilder.loadArgument(0).loadConstant(index).invoke(STATIC_CONTEXT_GET_METHOD).castOrUnbox(ConstructorCallback.class.getName()); // Load this and the InstanceContext constructorBuilder.loadThis().loadArgument(1); constructorBuilder.invoke(CONSTRUCTOR_CALLBACK_METHOD); }
private void createReturnValueGetter() { InstructionBuilder builder = newMethod("getReturnValue", Object.class); if (isVoid) { builder.loadNull().returnResult(); } else { builder.loadThis().getField(invocationClassName, RETURN_VALUE, description.returnType) .boxPrimitive(description.returnType).returnResult(); } }
private void createReturnValueGetter() { InstructionBuilder builder = newMethod("getReturnValue", Object.class); if (isVoid) { builder.loadNull().returnResult(); } else { builder.loadThis().getField(invocationClassName, RETURN_VALUE, description.returnType) .boxPrimitive(description.returnType).returnResult(); } }
private void initializeComputedField(ComputedValue<?> computedValue) { int index = plasticClass.staticContext.store(computedValue); plasticClass.constructorBuilder.loadThis(); // for the putField() // Get the ComputedValue out of the StaticContext and onto the stack plasticClass.constructorBuilder.loadArgument(0).loadConstant(index); plasticClass.constructorBuilder.invoke(PlasticClassImpl.STATIC_CONTEXT_GET_METHOD).checkcast(ComputedValue.class); // Add the InstanceContext to the stack plasticClass.constructorBuilder.loadArgument(1); plasticClass.constructorBuilder.invoke(PlasticClassImpl.COMPUTED_VALUE_GET_METHOD).castOrUnbox(typeName); plasticClass.constructorBuilder.putField(plasticClass.className, node.name, typeName); }
private void initializeComputedField(ComputedValue<?> computedValue) { int index = plasticClass.staticContext.store(computedValue); plasticClass.constructorBuilder.loadThis(); // for the putField() // Get the ComputedValue out of the StaticContext and onto the stack plasticClass.constructorBuilder.loadArgument(0).loadConstant(index); plasticClass.constructorBuilder.invoke(PlasticClassImpl.STATIC_CONTEXT_GET_METHOD).checkcast(ComputedValue.class); // Add the InstanceContext to the stack plasticClass.constructorBuilder.loadArgument(1); plasticClass.constructorBuilder.invoke(PlasticClassImpl.COMPUTED_VALUE_GET_METHOD).castOrUnbox(typeName); plasticClass.constructorBuilder.putField(plasticClass.className, node.name, typeName); }