this.returnType = Type.getReturnType(desc);
}
void enhandMethod_Void() {
mv.visitCode();
Label l0 = new Label();
Label l1 = new Label();
Label l2 = new Label();
mv.visitTryCatchBlock(l0, l1, l2, "java/lang/Throwable");
mv.visitLabel(l0);
mv.visitTypeInsn(NEW, "org/nutz/aop/InterceptorChain");
mv.visitInsn(DUP);
visitX(methodIndex);
mv.visitVarInsn(ALOAD, 0);
mv.visitFieldInsn(GETSTATIC, myName, AsmClassAgent.MethodArray_FieldName, "[Ljava/lang/reflect/Method;");
visitX(methodIndex);
mv.visitInsn(AALOAD);
mv.visitFieldInsn(GETSTATIC, myName, AsmClassAgent.MethodInterceptorList_FieldName, "[Ljava/util/List;");
visitX(methodIndex);
mv.visitInsn(AALOAD);
loadArgsAsArray();
mv.visitMethodInsn( INVOKESPECIAL,
"org/nutz/aop/InterceptorChain",
"<init>",
"(ILjava/lang/Object;Ljava/lang/reflect/Method;Ljava/util/List;[Ljava/lang/Object;)V");
mv.visitMethodInsn( INVOKEVIRTUAL,
"org/nutz/aop/InterceptorChain",
"doChain",
"()Lorg/nutz/aop/InterceptorChain;");
{
if (Type.getReturnType(desc).equals(Type.VOID_TYPE)) {
mv.visitInsn(POP);
} else {
mv.visitMethodInsn( INVOKEVIRTUAL,
"org/nutz/aop/InterceptorChain",
"getReturn",
"()Ljava/lang/Object;");
AsmHelper.checkCast(returnType,mv);
returnIt();
}
}
mv.visitLabel(l1);
Label l3 = new Label();
mv.visitJumpInsn(GOTO, l3);
mv.visitLabel(l2);
mv.visitVarInsn(ASTORE, 3);
mv.visitVarInsn(ALOAD, 3);
// mv.visitMethodInsn(INVOKESTATIC, "org/nutz/lang/Lang", "wrapThrow",