private void writeTargetField() { visitField(ACC_PRIVATE, TARGET_FIELD, targetType.getDescriptor(), null, null); }
void write() { // write our field to hold target field reference (but just once)... if (fieldRefs.add(targetFieldName)) { visitField(ACC_PRIVATE | ACC_STATIC, fieldRefName, FIELD_TYPE.getDescriptor(), null, null); } visitCode(); if (isSetter) { // pseudocode: // field_x.set(this, arg0); loadFieldRef(); loadTarget(); loadArg(0); Class<?> parameterType = iMethod.getParameterTypes()[0]; if (parameterType.isPrimitive()) { box(Type.getType(parameterType)); } invokeVirtual(FIELD_TYPE, FIELD$SET); returnValue(); } else { // getter // pseudocode: // return field_x.get(this); loadFieldRef(); loadTarget(); invokeVirtual(FIELD_TYPE, FIELD$GET); castForReturn(iMethod.getReturnType()); returnValue(); } endMethod(); }
void write() { // write field to hold method reference... visitField(ACC_PRIVATE | ACC_STATIC, methodRefName, METHOD_TYPE.getDescriptor(), null, null); visitCode(); // pseudocode: // try { // return methodN.invoke(this, *args); // } catch (InvocationTargetException e) { // throw e.getCause(); // } TryCatch tryCatch = tryStart(INVOCATION_TARGET_EXCEPTION_TYPE); loadOriginalMethodRef(); loadTarget(); loadArgArray(); invokeVirtual(METHOD_TYPE, METHOD$INVOKE); tryCatch.end(); castForReturn(iMethod.getReturnType()); returnValue(); tryCatch.handler(); int exceptionLocalVar = newLocal(THROWABLE_TYPE); storeLocal(exceptionLocalVar); loadLocal(exceptionLocalVar); invokeVirtual(THROWABLE_TYPE, THROWABLE$GET_CAUSE); throwException(); endMethod(); }
private void writeTargetField() { visitField(ACC_PRIVATE, TARGET_FIELD, targetType.getDescriptor(), null, null); }
void write() { // write our field to hold target field reference (but just once)... if (fieldRefs.add(targetFieldName)) { visitField(ACC_PRIVATE | ACC_STATIC, fieldRefName, FIELD_TYPE.getDescriptor(), null, null); } visitCode(); if (isSetter) { // pseudocode: // field_x.set(this, arg0); loadFieldRef(); loadTarget(); loadArg(0); Class<?> parameterType = iMethod.getParameterTypes()[0]; if (parameterType.isPrimitive()) { box(Type.getType(parameterType)); } invokeVirtual(FIELD_TYPE, FIELD$SET); returnValue(); } else { // getter // pseudocode: // return field_x.get(this); loadFieldRef(); loadTarget(); invokeVirtual(FIELD_TYPE, FIELD$GET); castForReturn(iMethod.getReturnType()); returnValue(); } endMethod(); }
void write() { // write field to hold method reference... visitField(ACC_PRIVATE | ACC_STATIC, methodRefName, METHOD_TYPE.getDescriptor(), null, null); visitCode(); // pseudocode: // try { // return methodN.invoke(this, *args); // } catch (InvocationTargetException e) { // throw e.getCause(); // } TryCatch tryCatch = tryStart(INVOCATION_TARGET_EXCEPTION_TYPE); loadOriginalMethodRef(); loadTarget(); loadArgArray(); invokeVirtual(METHOD_TYPE, METHOD$INVOKE); tryCatch.end(); castForReturn(iMethod.getReturnType()); returnValue(); tryCatch.handler(); int exceptionLocalVar = newLocal(THROWABLE_TYPE); storeLocal(exceptionLocalVar); loadLocal(exceptionLocalVar); invokeVirtual(THROWABLE_TYPE, THROWABLE$GET_CAUSE); throwException(); endMethod(); }