List of usage examples for org.objectweb.asm MethodVisitor visitTryCatchBlock
public void visitTryCatchBlock(final Label start, final Label end, final Label handler, final String type)
From source file:org.springsource.loaded.SystemClassReflectionRewriter.java
License:Apache License
/** * Create a method that can be used to intercept the calls to hasStaticInitializer made in the ObjectStreamClass. * The method will ask SpringLoaded whether the type has a static initializer. SpringLoaded will be able to answer * if it is a reloadable type. If it is not a reloadable type then springloaded will throw an exception which will * be caught here and the 'regular' call to hasStaticInitializer will be made. * /*from w w w .ja v a 2 s . c o m*/ * @param cw the classwriter to create the method in * @param classname the name of the class being visited */ public static void generateJLObjectStream_hasStaticInitializer(ClassWriter cw, String classname) { FieldVisitor fv = cw.visitField(ACC_PUBLIC + ACC_STATIC, jloObjectStream_hasInitializerMethod, "Ljava/lang/reflect/Method;", null, null); fv.visitEnd(); MethodVisitor mv = cw.visitMethod(ACC_PRIVATE + ACC_STATIC, jloObjectStream_hasInitializerMethod, "(Ljava/lang/Class;)Z", null, null); mv.visitCode(); Label l0 = new Label(); Label l1 = new Label(); Label l2 = new Label(); mv.visitTryCatchBlock(l0, l1, l2, "java/lang/Exception"); mv.visitLabel(l0); mv.visitFieldInsn(GETSTATIC, classname, jloObjectStream_hasInitializerMethod, "Ljava/lang/reflect/Method;"); mv.visitInsn(ACONST_NULL); mv.visitInsn(ICONST_1); mv.visitTypeInsn(ANEWARRAY, "java/lang/Object"); mv.visitInsn(DUP); mv.visitInsn(ICONST_0); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(AASTORE); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/reflect/Method", "invoke", "(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;", false); mv.visitTypeInsn(CHECKCAST, "java/lang/Boolean"); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Boolean", "booleanValue", "()Z", false); mv.visitLabel(l1); mv.visitInsn(IRETURN); mv.visitLabel(l2); // If not a reloadable type, we'll end up here (the method we called threw IllegalStateException), just make that native method call mv.visitVarInsn(ASTORE, 1); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESTATIC, classname, "hasStaticInitializer", "(Ljava/lang/Class;)Z"); mv.visitInsn(IRETURN); mv.visitMaxs(3, 1); mv.visitEnd(); }
From source file:org.springsource.loaded.SystemClassReflectionRewriter.java
License:Apache License
public static void generateJLRF_Get(ClassWriter cw, String classname) { FieldVisitor fv = cw.visitField(ACC_PUBLIC + ACC_STATIC, jlrfGetMember, "Ljava/lang/reflect/Method;", null, null);//from ww w . j a v a 2s .c o m fv.visitEnd(); MethodVisitor mv = cw.visitMethod(ACC_PRIVATE + ACC_STATIC, jlrfGetMember, jlrfGetDescriptor, null, new String[] { "java/lang/IllegalAccessException", "java/lang/IllegalArgumentException" }); mv.visitCode(); Label l0 = new Label(); Label l1 = new Label(); Label l2 = new Label(); mv.visitTryCatchBlock(l0, l1, l2, "java/lang/Exception"); Label l3 = new Label(); mv.visitLabel(l3); mv.visitFieldInsn(GETSTATIC, classname, jlrfGetMember, "Ljava/lang/reflect/Method;"); mv.visitJumpInsn(IFNONNULL, l0); Label l4 = new Label(); mv.visitLabel(l4); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/reflect/Field", "get", "(Ljava/lang/Object;)Ljava/lang/Object;", false); mv.visitInsn(ARETURN); mv.visitLabel(l0); mv.visitFieldInsn(GETSTATIC, classname, jlrfGetMember, "Ljava/lang/reflect/Method;"); mv.visitInsn(ACONST_NULL); mv.visitInsn(ICONST_2); mv.visitTypeInsn(ANEWARRAY, "java/lang/Object"); mv.visitInsn(DUP); mv.visitInsn(ICONST_0); mv.visitVarInsn(ALOAD, 0); // target field mv.visitInsn(AASTORE); mv.visitInsn(DUP); mv.visitInsn(ICONST_1); mv.visitVarInsn(ALOAD, 1); // instance on which to get the field mv.visitInsn(AASTORE); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/reflect/Method", "invoke", "(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;", false); mv.visitLabel(l1); mv.visitInsn(ARETURN); mv.visitLabel(l2); mv.visitVarInsn(ASTORE, 2); Label l5 = new Label(); mv.visitLabel(l5); Label l6 = new Label(); mv.visitLabel(l6); mv.visitInsn(ACONST_NULL); mv.visitInsn(ARETURN); Label l7 = new Label(); mv.visitLabel(l7); mv.visitMaxs(8, 4); mv.visitEnd(); }
From source file:org.springsource.loaded.SystemClassReflectionRewriter.java
License:Apache License
public static void generateJLRM_Invoke(ClassWriter cw, String classname) { FieldVisitor fv = cw.visitField(ACC_PUBLIC + ACC_STATIC, jlrmInvokeMember, "Ljava/lang/reflect/Method;", null, null);/*from ww w . j a va 2 s .c om*/ fv.visitEnd(); MethodVisitor mv = cw.visitMethod(ACC_PRIVATE + ACC_STATIC, jlrmInvokeMember, jlrmInvokeDescriptor, null, new String[] { "java/lang/IllegalAccessException", "java/lang/reflect/InvocationTargetException" }); mv.visitCode(); Label l0 = new Label(); Label l1 = new Label(); Label l2 = new Label(); mv.visitTryCatchBlock(l0, l1, l2, "java/lang/Exception"); Label l3 = new Label(); mv.visitLabel(l3); mv.visitFieldInsn(GETSTATIC, classname, jlrmInvokeMember, "Ljava/lang/reflect/Method;"); mv.visitJumpInsn(IFNONNULL, l0); Label l4 = new Label(); mv.visitLabel(l4); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitVarInsn(ALOAD, 2); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/reflect/Method", "invoke", "(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;", false); mv.visitInsn(ARETURN); mv.visitLabel(l0); mv.visitFieldInsn(GETSTATIC, classname, jlrmInvokeMember, "Ljava/lang/reflect/Method;"); mv.visitInsn(ACONST_NULL); mv.visitInsn(ICONST_3); mv.visitTypeInsn(ANEWARRAY, "java/lang/Object"); mv.visitInsn(DUP); mv.visitInsn(ICONST_0); mv.visitVarInsn(ALOAD, 0); // target method mv.visitInsn(AASTORE); mv.visitInsn(DUP); mv.visitInsn(ICONST_1); mv.visitVarInsn(ALOAD, 1); // instance on which to call the method mv.visitInsn(AASTORE); mv.visitInsn(DUP); mv.visitInsn(ICONST_2); mv.visitVarInsn(ALOAD, 2); // arguments to method call mv.visitInsn(AASTORE); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/reflect/Method", "invoke", "(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;", false); mv.visitLabel(l1); mv.visitInsn(ARETURN); mv.visitLabel(l2); mv.visitVarInsn(ASTORE, 3); Label l5 = new Label(); mv.visitLabel(l5); Label l6 = new Label(); mv.visitLabel(l6); mv.visitInsn(ACONST_NULL); mv.visitInsn(ARETURN); Label l7 = new Label(); mv.visitLabel(l7); mv.visitMaxs(8, 4); mv.visitEnd(); }
From source file:org.springsource.loaded.SystemClassReflectionRewriter.java
License:Apache License
public static void generateJLC_GetDeclaredConstructors(ClassWriter cw, String classname) { FieldVisitor fv = cw.visitField(ACC_PUBLIC + ACC_STATIC, jlcGetDeclaredConstructorsMember, "Ljava/lang/reflect/Method;", null, null); fv.visitEnd();/*from ww w .ja v a 2 s . c o m*/ MethodVisitor mv = cw.visitMethod(ACC_PRIVATE + ACC_STATIC, jlcGetDeclaredConstructorsMember, jlcGetDeclaredConstructorsDescriptor, null, null); mv.visitCode(); Label l0 = new Label(); Label l1 = new Label(); Label l2 = new Label(); mv.visitTryCatchBlock(l0, l1, l2, "java/lang/Exception"); Label l3 = new Label(); mv.visitLabel(l3); mv.visitFieldInsn(GETSTATIC, classname, jlcGetDeclaredConstructorsMember, "Ljava/lang/reflect/Method;"); mv.visitJumpInsn(IFNONNULL, l0); Label l4 = new Label(); mv.visitLabel(l4); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Class", "getDeclaredConstructors", "()[Ljava/lang/reflect/Constructor;", false); mv.visitInsn(ARETURN); mv.visitLabel(l0); mv.visitFieldInsn(GETSTATIC, classname, jlcGetDeclaredConstructorsMember, "Ljava/lang/reflect/Method;"); mv.visitInsn(ACONST_NULL); mv.visitInsn(ICONST_1); mv.visitTypeInsn(ANEWARRAY, "java/lang/Object"); mv.visitInsn(DUP); mv.visitInsn(ICONST_0); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(AASTORE); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/reflect/Method", "invoke", "(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;", false); mv.visitTypeInsn(CHECKCAST, "[Ljava/lang/reflect/Constructor;"); mv.visitLabel(l1); mv.visitInsn(ARETURN); mv.visitLabel(l2); mv.visitVarInsn(ASTORE, 1); Label l5 = new Label(); mv.visitLabel(l5); Label l6 = new Label(); mv.visitLabel(l6); mv.visitInsn(ACONST_NULL); mv.visitInsn(ARETURN); Label l7 = new Label(); mv.visitLabel(l7); // mv.visitLocalVariable("clazz", "Ljava/lang/Class;", "Ljava/lang/Class<*>;", l3, l7, 0); // mv.visitLocalVariable("e", "Ljava/lang/Exception;", null, l5, l7, 1); mv.visitMaxs(6, 2); mv.visitEnd(); }
From source file:org.springsource.loaded.SystemClassReflectionRewriter.java
License:Apache License
public static void generateJLCGMODS(ClassWriter cw, String classname) { FieldVisitor fv = cw.visitField(ACC_PUBLIC + ACC_STATIC, "__sljlcgmods", "Ljava/lang/reflect/Method;", null, null);//from ww w. j a v a2 s . c o m fv.visitEnd(); MethodVisitor mv = cw.visitMethod(ACC_PRIVATE + ACC_STATIC, "__sljlcgmods", "(Ljava/lang/Class;)I", "(Ljava/lang/Class<*>;)I", null); mv.visitCode(); Label l0 = new Label(); Label l1 = new Label(); Label l2 = new Label(); mv.visitTryCatchBlock(l0, l1, l2, "java/lang/Exception"); Label l3 = new Label(); mv.visitLabel(l3); mv.visitFieldInsn(GETSTATIC, classname, "__sljlcgmods", "Ljava/lang/reflect/Method;"); mv.visitJumpInsn(IFNONNULL, l0); Label l4 = new Label(); mv.visitLabel(l4); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Class", "getModifiers", "()I", false); mv.visitInsn(IRETURN); mv.visitLabel(l0); mv.visitFieldInsn(GETSTATIC, classname, "__sljlcgmods", "Ljava/lang/reflect/Method;"); mv.visitInsn(ACONST_NULL); mv.visitInsn(ICONST_1); mv.visitTypeInsn(ANEWARRAY, "java/lang/Object"); mv.visitInsn(DUP); mv.visitInsn(ICONST_0); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(AASTORE); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/reflect/Method", "invoke", "(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;", false); mv.visitTypeInsn(CHECKCAST, "java/lang/Integer"); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Integer", "intValue", "()I", false); mv.visitLabel(l1); mv.visitInsn(IRETURN); mv.visitLabel(l2); mv.visitVarInsn(ASTORE, 1); Label l5 = new Label(); mv.visitLabel(l5); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Exception", "printStackTrace", "()V", false); Label l6 = new Label(); mv.visitLabel(l6); mv.visitInsn(ICONST_0); mv.visitInsn(IRETURN); Label l7 = new Label(); mv.visitLabel(l7); // mv.visitLocalVariable("clazz", "Ljava/lang/Class;", "Ljava/lang/Class<*>;", l3, l7, 0); // mv.visitLocalVariable("e", "Ljava/lang/Exception;", null, l5, l7, 1); mv.visitMaxs(6, 2); mv.visitEnd(); }
From source file:org.springsource.loaded.SystemClassReflectionRewriter.java
License:Apache License
public static void generateJLCGDC(ClassWriter cw, String classname) { FieldVisitor fv = cw.visitField(ACC_PUBLIC + ACC_STATIC, "__sljlcgdc", "Ljava/lang/reflect/Method;", null, null);/*from w ww. j a va 2 s. c om*/ fv.visitEnd(); MethodVisitor mv = cw.visitMethod(ACC_PRIVATE + ACC_STATIC + ACC_VARARGS, "__sljlcgdc", "(Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/reflect/Constructor;", null, new String[] { "java/lang/NoSuchMethodException" }); mv.visitCode(); Label l0 = new Label(); Label l1 = new Label(); Label l2 = new Label(); mv.visitTryCatchBlock(l0, l1, l2, "java/lang/reflect/InvocationTargetException"); Label l3 = new Label(); mv.visitTryCatchBlock(l0, l1, l3, "java/lang/Exception"); Label l4 = new Label(); mv.visitLabel(l4); mv.visitFieldInsn(GETSTATIC, classname, "__sljlcgdc", "Ljava/lang/reflect/Method;"); mv.visitJumpInsn(IFNONNULL, l0); Label l5 = new Label(); mv.visitLabel(l5); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Class", "getDeclaredConstructor", "([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;", false); mv.visitInsn(ARETURN); mv.visitLabel(l0); mv.visitFieldInsn(GETSTATIC, classname, "__sljlcgdc", "Ljava/lang/reflect/Method;"); mv.visitInsn(ACONST_NULL); mv.visitInsn(ICONST_2); mv.visitTypeInsn(ANEWARRAY, "java/lang/Object"); mv.visitInsn(DUP); mv.visitInsn(ICONST_0); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(AASTORE); mv.visitInsn(DUP); mv.visitInsn(ICONST_1); mv.visitVarInsn(ALOAD, 1); mv.visitInsn(AASTORE); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/reflect/Method", "invoke", "(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;", false); mv.visitTypeInsn(CHECKCAST, "java/lang/reflect/Constructor"); mv.visitLabel(l1); mv.visitInsn(ARETURN); mv.visitLabel(l2); mv.visitVarInsn(ASTORE, 2); Label l6 = new Label(); mv.visitLabel(l6); mv.visitVarInsn(ALOAD, 2); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/reflect/InvocationTargetException", "printStackTrace", "()V", false); Label l7 = new Label(); mv.visitLabel(l7); mv.visitVarInsn(ALOAD, 2); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/reflect/InvocationTargetException", "getCause", "()Ljava/lang/Throwable;", false); mv.visitTypeInsn(INSTANCEOF, "java/lang/NoSuchMethodException"); Label l8 = new Label(); mv.visitJumpInsn(IFEQ, l8); Label l9 = new Label(); mv.visitLabel(l9); mv.visitVarInsn(ALOAD, 2); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/reflect/InvocationTargetException", "getCause", "()Ljava/lang/Throwable;", false); mv.visitTypeInsn(CHECKCAST, "java/lang/NoSuchMethodException"); mv.visitInsn(ATHROW); mv.visitLabel(l3); mv.visitVarInsn(ASTORE, 2); Label l10 = new Label(); mv.visitLabel(l10); // mv.visitVarInsn(ALOAD, 2); // mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Exception", "printStackTrace", "()V"); mv.visitLabel(l8); mv.visitInsn(ACONST_NULL); mv.visitInsn(ARETURN); Label l11 = new Label(); mv.visitLabel(l11); // mv.visitLocalVariable("clazz", "Ljava/lang/Class;", "Ljava/lang/Class<*>;", l4, l11, 0); // mv.visitLocalVariable("parameterTypes", "[Ljava/lang/Class;", null, l4, l11, 1); // mv.visitLocalVariable("ite", "Ljava/lang/reflect/InvocationTargetException;", null, l6, l3, 2); // mv.visitLocalVariable("e", "Ljava/lang/Exception;", null, l10, l8, 2); mv.visitMaxs(6, 3); mv.visitEnd(); }
From source file:org.springsource.loaded.SystemClassReflectionRewriter.java
License:Apache License
public static void generateJLCGC(ClassWriter cw, String classname) { FieldVisitor fv = cw.visitField(ACC_PUBLIC + ACC_STATIC, "__sljlcgc", "Ljava/lang/reflect/Method;", null, null);//from www . ja va 2 s .c o m fv.visitEnd(); MethodVisitor mv = cw.visitMethod(ACC_PRIVATE + ACC_STATIC + ACC_VARARGS, "__sljlcgc", "(Ljava/lang/Class;[Ljava/lang/Class;)Ljava/lang/reflect/Constructor;", null, new String[] { "java/lang/NoSuchMethodException" }); mv.visitCode(); Label l0 = new Label(); Label l1 = new Label(); Label l2 = new Label(); mv.visitTryCatchBlock(l0, l1, l2, "java/lang/reflect/InvocationTargetException"); Label l3 = new Label(); mv.visitTryCatchBlock(l0, l1, l3, "java/lang/Exception"); Label l4 = new Label(); mv.visitLabel(l4); mv.visitFieldInsn(GETSTATIC, classname, "__sljlcgc", "Ljava/lang/reflect/Method;"); mv.visitJumpInsn(IFNONNULL, l0); Label l5 = new Label(); mv.visitLabel(l5); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Class", "getConstructor", "([Ljava/lang/Class;)Ljava/lang/reflect/Constructor;", false); mv.visitInsn(ARETURN); mv.visitLabel(l0); mv.visitFieldInsn(GETSTATIC, classname, "__sljlcgc", "Ljava/lang/reflect/Method;"); mv.visitInsn(ACONST_NULL); mv.visitInsn(ICONST_2); mv.visitTypeInsn(ANEWARRAY, "java/lang/Object"); mv.visitInsn(DUP); mv.visitInsn(ICONST_0); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(AASTORE); mv.visitInsn(DUP); mv.visitInsn(ICONST_1); mv.visitVarInsn(ALOAD, 1); mv.visitInsn(AASTORE); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/reflect/Method", "invoke", "(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;", false); mv.visitTypeInsn(CHECKCAST, "java/lang/reflect/Constructor"); mv.visitLabel(l1); mv.visitInsn(ARETURN); mv.visitLabel(l2); mv.visitVarInsn(ASTORE, 2); Label l6 = new Label(); mv.visitLabel(l6); mv.visitVarInsn(ALOAD, 2); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/reflect/InvocationTargetException", "printStackTrace", "()V", false); Label l7 = new Label(); mv.visitLabel(l7); mv.visitVarInsn(ALOAD, 2); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/reflect/InvocationTargetException", "getCause", "()Ljava/lang/Throwable;", false); mv.visitTypeInsn(INSTANCEOF, "java/lang/NoSuchMethodException"); Label l8 = new Label(); mv.visitJumpInsn(IFEQ, l8); Label l9 = new Label(); mv.visitLabel(l9); mv.visitVarInsn(ALOAD, 2); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/reflect/InvocationTargetException", "getCause", "()Ljava/lang/Throwable;", false); mv.visitTypeInsn(CHECKCAST, "java/lang/NoSuchMethodException"); mv.visitInsn(ATHROW); mv.visitLabel(l3); mv.visitVarInsn(ASTORE, 2); Label l10 = new Label(); mv.visitLabel(l10); // mv.visitVarInsn(ALOAD, 2); // mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Exception", "printStackTrace", "()V"); mv.visitLabel(l8); mv.visitInsn(ACONST_NULL); mv.visitInsn(ARETURN); Label l11 = new Label(); mv.visitLabel(l11); // mv.visitLocalVariable("clazz", "Ljava/lang/Class;", "Ljava/lang/Class<*>;", l4, l11, 0); // mv.visitLocalVariable("parameterTypes", "[Ljava/lang/Class;", null, l4, l11, 1); // mv.visitLocalVariable("ite", "Ljava/lang/reflect/InvocationTargetException;", null, l6, l3, 2); // mv.visitLocalVariable("e", "Ljava/lang/Exception;", null, l10, l8, 2); mv.visitMaxs(6, 3); mv.visitEnd(); }
From source file:org.springsource.loaded.SystemClassReflectionRewriter.java
License:Apache License
public static void generateJLCMethod(ClassWriter cw, String classname, String membername, String methodname) { FieldVisitor fv = cw.visitField(ACC_PUBLIC + ACC_STATIC, membername, "Ljava/lang/reflect/Method;", null, null);/* w w w . jav a 2 s.c o m*/ fv.visitEnd(); MethodVisitor mv = cw.visitMethod(ACC_PRIVATE + ACC_STATIC + ACC_VARARGS, membername, "(Ljava/lang/Class;Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;", null, new String[] { "java/lang/NoSuchMethodException" }); mv.visitCode(); Label l0 = new Label(); Label l1 = new Label(); Label l2 = new Label(); mv.visitTryCatchBlock(l0, l1, l2, "java/lang/reflect/InvocationTargetException"); Label l3 = new Label(); mv.visitTryCatchBlock(l0, l1, l3, "java/lang/Exception"); Label l4 = new Label(); mv.visitLabel(l4); mv.visitFieldInsn(GETSTATIC, classname, membername, "Ljava/lang/reflect/Method;"); mv.visitJumpInsn(IFNONNULL, l0); Label l5 = new Label(); mv.visitLabel(l5); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitVarInsn(ALOAD, 2); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Class", methodname, "(Ljava/lang/String;[Ljava/lang/Class;)Ljava/lang/reflect/Method;", false); mv.visitInsn(ARETURN); mv.visitLabel(l0); mv.visitFieldInsn(GETSTATIC, classname, membername, "Ljava/lang/reflect/Method;"); mv.visitInsn(ACONST_NULL); mv.visitInsn(ICONST_3); mv.visitTypeInsn(ANEWARRAY, "java/lang/Object"); mv.visitInsn(DUP); mv.visitInsn(ICONST_0); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(AASTORE); mv.visitInsn(DUP); mv.visitInsn(ICONST_1); mv.visitVarInsn(ALOAD, 1); mv.visitInsn(AASTORE); mv.visitInsn(DUP); mv.visitInsn(ICONST_2); mv.visitVarInsn(ALOAD, 2); mv.visitInsn(AASTORE); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/reflect/Method", "invoke", "(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;", false); mv.visitTypeInsn(CHECKCAST, "java/lang/reflect/Method"); mv.visitLabel(l1); mv.visitInsn(ARETURN); mv.visitLabel(l2); mv.visitVarInsn(ASTORE, 3); Label l6 = new Label(); mv.visitLabel(l6); // Don't print the exception if just unwrapping it // mv.visitVarInsn(ALOAD, 3); // mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/reflect/InvocationTargetException", "printStackTrace", "()V"); Label l7 = new Label(); mv.visitLabel(l7); mv.visitVarInsn(ALOAD, 3); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/reflect/InvocationTargetException", "getCause", "()Ljava/lang/Throwable;", false); mv.visitTypeInsn(INSTANCEOF, "java/lang/NoSuchMethodException"); Label l8 = new Label(); mv.visitJumpInsn(IFEQ, l8); Label l9 = new Label(); mv.visitLabel(l9); mv.visitVarInsn(ALOAD, 3); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/reflect/InvocationTargetException", "getCause", "()Ljava/lang/Throwable;", false); mv.visitTypeInsn(CHECKCAST, "java/lang/NoSuchMethodException"); mv.visitInsn(ATHROW); mv.visitLabel(l3); mv.visitVarInsn(ASTORE, 3); Label l10 = new Label(); mv.visitLabel(l10); mv.visitVarInsn(ALOAD, 3); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Exception", "printStackTrace", "()V", false); mv.visitLabel(l8); mv.visitInsn(ACONST_NULL); mv.visitInsn(ARETURN); Label l11 = new Label(); mv.visitLabel(l11); // mv.visitLocalVariable("clazz", "Ljava/lang/Class;", "Ljava/lang/Class<*>;", l4, l11, 0); // mv.visitLocalVariable("methodname", "Ljava/lang/String;", null, l4, l11, 1); // mv.visitLocalVariable("parameterTypes", "[Ljava/lang/Class;", null, l4, l11, 2); // mv.visitLocalVariable("ite", "Ljava/lang/reflect/InvocationTargetException;", null, l6, l3, 3); // mv.visitLocalVariable("e", "Ljava/lang/Exception;", null, l10, l8, 3); mv.visitMaxs(6, 4); mv.visitEnd(); }
From source file:org.springsource.loaded.SystemClassReflectionRewriter.java
License:Apache License
public static void generateJLCGDF(ClassWriter cw, String classname, String fieldname, String methodname) { FieldVisitor fv = cw.visitField(ACC_PUBLIC_STATIC, fieldname, "Ljava/lang/reflect/Method;", null, null); fv.visitEnd();//from ww w . j av a 2s . c o m MethodVisitor mv = cw.visitMethod(ACC_PRIVATE + ACC_STATIC, fieldname, "(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/reflect/Field;", null, new String[] { "java/lang/NoSuchFieldException" }); mv.visitCode(); Label l0 = new Label(); Label l1 = new Label(); Label l2 = new Label(); mv.visitTryCatchBlock(l0, l1, l2, "java/lang/reflect/InvocationTargetException"); Label l3 = new Label(); mv.visitTryCatchBlock(l0, l1, l3, "java/lang/Exception"); Label l4 = new Label(); mv.visitLabel(l4); mv.visitFieldInsn(GETSTATIC, classname, fieldname, "Ljava/lang/reflect/Method;"); mv.visitJumpInsn(IFNONNULL, l0); Label l5 = new Label(); mv.visitLabel(l5); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ALOAD, 1); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Class", methodname, "(Ljava/lang/String;)Ljava/lang/reflect/Field;", false); mv.visitInsn(ARETURN); mv.visitLabel(l0); mv.visitFieldInsn(GETSTATIC, classname, fieldname, "Ljava/lang/reflect/Method;"); mv.visitInsn(ACONST_NULL); mv.visitInsn(ICONST_2); mv.visitTypeInsn(ANEWARRAY, "java/lang/Object"); mv.visitInsn(DUP); mv.visitInsn(ICONST_0); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(AASTORE); mv.visitInsn(DUP); mv.visitInsn(ICONST_1); mv.visitVarInsn(ALOAD, 1); mv.visitInsn(AASTORE); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/reflect/Method", "invoke", "(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;", false); mv.visitTypeInsn(CHECKCAST, "java/lang/reflect/Field"); mv.visitLabel(l1); mv.visitInsn(ARETURN); mv.visitLabel(l2); mv.visitVarInsn(ASTORE, 2); Label l6 = new Label(); mv.visitLabel(l6); mv.visitVarInsn(ALOAD, 2); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/reflect/InvocationTargetException", "getCause", "()Ljava/lang/Throwable;", false); mv.visitTypeInsn(INSTANCEOF, "java/lang/NoSuchFieldException"); Label l7 = new Label(); mv.visitJumpInsn(IFEQ, l7); Label l8 = new Label(); mv.visitLabel(l8); mv.visitVarInsn(ALOAD, 2); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/reflect/InvocationTargetException", "getCause", "()Ljava/lang/Throwable;", false); mv.visitTypeInsn(CHECKCAST, "java/lang/NoSuchFieldException"); mv.visitInsn(ATHROW); mv.visitLabel(l3); mv.visitVarInsn(ASTORE, 2); mv.visitLabel(l7); mv.visitInsn(ACONST_NULL); mv.visitInsn(ARETURN); Label l9 = new Label(); mv.visitLabel(l9); // mv.visitLocalVariable("clazz", "Ljava/lang/Class;", "Ljava/lang/Class<*>;", l4, l9, 0); // mv.visitLocalVariable("fieldname", "Ljava/lang/String;", null, l4, l9, 1); // mv.visitLocalVariable("ite", "Ljava/lang/reflect/InvocationTargetException;", null, l6, l3, 2); mv.visitMaxs(6, 3); mv.visitEnd(); }
From source file:org.springsource.loaded.SystemClassReflectionRewriter.java
License:Apache License
public static void generateJLCGDMS(ClassWriter cw, String classname, String field, String methodname) { FieldVisitor fv = cw.visitField(ACC_PUBLIC + ACC_STATIC, field, "Ljava/lang/reflect/Method;", null, null); fv.visitEnd();/*from www . j ava 2 s . c o m*/ MethodVisitor mv = cw.visitMethod(ACC_PRIVATE + ACC_STATIC, field, "(Ljava/lang/Class;)[Ljava/lang/reflect/Method;", null, null); mv.visitCode(); Label l0 = new Label(); Label l1 = new Label(); Label l2 = new Label(); mv.visitTryCatchBlock(l0, l1, l2, "java/lang/Exception"); Label l3 = new Label(); mv.visitLabel(l3); mv.visitFieldInsn(GETSTATIC, classname, field, "Ljava/lang/reflect/Method;"); mv.visitJumpInsn(IFNONNULL, l0); Label l4 = new Label(); mv.visitLabel(l4); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Class", methodname, "()[Ljava/lang/reflect/Method;", false); mv.visitInsn(ARETURN); mv.visitLabel(l0); mv.visitFieldInsn(GETSTATIC, classname, field, "Ljava/lang/reflect/Method;"); mv.visitInsn(ACONST_NULL); mv.visitInsn(ICONST_1); mv.visitTypeInsn(ANEWARRAY, "java/lang/Object"); mv.visitInsn(DUP); mv.visitInsn(ICONST_0); mv.visitVarInsn(ALOAD, 0); mv.visitInsn(AASTORE); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/reflect/Method", "invoke", "(Ljava/lang/Object;[Ljava/lang/Object;)Ljava/lang/Object;", false); mv.visitTypeInsn(CHECKCAST, "[Ljava/lang/reflect/Method;"); mv.visitLabel(l1); mv.visitInsn(ARETURN); mv.visitLabel(l2); mv.visitVarInsn(ASTORE, 1); Label l5 = new Label(); mv.visitLabel(l5); mv.visitInsn(ACONST_NULL); mv.visitInsn(ARETURN); Label l6 = new Label(); mv.visitLabel(l6); // mv.visitLocalVariable("clazz", "Ljava/lang/Class;", "Ljava/lang/Class<*>;", l3, l6, 0); // mv.visitLocalVariable("e", "Ljava/lang/Exception;", null, l5, l6, 1); mv.visitMaxs(6, 2); mv.visitEnd(); }