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(); }
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(); }
public TryCatch tryStart(Type exceptionType) { return new TryCatch(this, exceptionType); } }
public TryCatch tryStart(Type exceptionType) { return new TryCatch(this, exceptionType); } }