Java Code Examples for jdk.internal.org.objectweb.asm.MethodVisitor#visitMethodInsn()
The following examples show how to use
jdk.internal.org.objectweb.asm.MethodVisitor#visitMethodInsn() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: RedefineRunningMethodsWithResolutionErrors.java From hottub with GNU General Public License v2.0 | 6 votes |
private static void createLoadNonExistentClassCode(MethodVisitor mv, Label classExists) { Label tryLoadBegin = new Label(); Label tryLoadEnd = new Label(); Label catchLoadBlock = new Label(); mv.visitTryCatchBlock(tryLoadBegin, tryLoadEnd, catchLoadBlock, "java/lang/NoClassDefFoundError"); // Try to load a class that does not exist to provoke resolution errors mv.visitLabel(tryLoadBegin); mv.visitMethodInsn(INVOKESTATIC, "NonExistentClass", "nonExistentMethod", "()V"); mv.visitLabel(tryLoadEnd); // No NoClassDefFoundError means NonExistentClass existed, which shouldn't happen mv.visitJumpInsn(GOTO, classExists); mv.visitFrame(F_SAME1, 0, new Object[0], 1, new Object[] { "java/lang/NoClassDefFoundError" }); mv.visitLabel(catchLoadBlock); // Ignore the expected NoClassDefFoundError mv.visitInsn(POP); }
Example 2
Source File: UnsupportedClassFileVersion.java From openjdk-jdk8u-backup with GNU General Public License v2.0 | 6 votes |
public static void writeClassFile() throws Exception { ClassWriter cw = new ClassWriter(0); MethodVisitor mv; cw.visit(99, ACC_PUBLIC + ACC_SUPER, "ClassFile", null, "java/lang/Object", null); mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V", false); mv.visitInsn(RETURN); mv.visitMaxs(1, 1); mv.visitEnd(); cw.visitEnd(); try (FileOutputStream fos = new FileOutputStream(new File("ClassFile.class"))) { fos.write(cw.toByteArray()); } }
Example 3
Source File: LambdaAsm.java From jdk8u60 with GNU General Public License v2.0 | 6 votes |
static void verifyASM() throws Exception { ClassWriter cw = new ClassWriter(0); cw.visit(V1_8, ACC_PUBLIC, "X", null, "java/lang/Object", null); MethodVisitor mv = cw.visitMethod(ACC_STATIC, "foo", "()V", null, null); mv.visitMaxs(2, 1); mv.visitMethodInsn(INVOKESTATIC, "java/util/function/Function.class", "identity", "()Ljava/util/function/Function;", true); mv.visitInsn(RETURN); cw.visitEnd(); byte[] carray = cw.toByteArray(); // for debugging // write((new File("X.class")).toPath(), carray, CREATE, TRUNCATE_EXISTING); // verify using javap/classfile reader ClassFile cf = ClassFile.read(new ByteArrayInputStream(carray)); int mcount = checkMethod(cf, "foo"); if (mcount < 1) { throw new RuntimeException("unexpected method count, expected 1" + "but got " + mcount); } }
Example 4
Source File: RedefineRunningMethodsWithResolutionErrors.java From openjdk-jdk8u with GNU General Public License v2.0 | 6 votes |
private static void createLoadNonExistentClassCode(MethodVisitor mv, Label classExists) { Label tryLoadBegin = new Label(); Label tryLoadEnd = new Label(); Label catchLoadBlock = new Label(); mv.visitTryCatchBlock(tryLoadBegin, tryLoadEnd, catchLoadBlock, "java/lang/NoClassDefFoundError"); // Try to load a class that does not exist to provoke resolution errors mv.visitLabel(tryLoadBegin); mv.visitMethodInsn(INVOKESTATIC, "NonExistentClass", "nonExistentMethod", "()V"); mv.visitLabel(tryLoadEnd); // No NoClassDefFoundError means NonExistentClass existed, which shouldn't happen mv.visitJumpInsn(GOTO, classExists); mv.visitFrame(F_SAME1, 0, new Object[0], 1, new Object[] { "java/lang/NoClassDefFoundError" }); mv.visitLabel(catchLoadBlock); // Ignore the expected NoClassDefFoundError mv.visitInsn(POP); }
Example 5
Source File: RedefineRunningMethodsWithResolutionErrors.java From openjdk-jdk9 with GNU General Public License v2.0 | 6 votes |
private static void createLoadNonExistentClassCode(MethodVisitor mv, Label classExists) { Label tryLoadBegin = new Label(); Label tryLoadEnd = new Label(); Label catchLoadBlock = new Label(); mv.visitTryCatchBlock(tryLoadBegin, tryLoadEnd, catchLoadBlock, "java/lang/NoClassDefFoundError"); // Try to load a class that does not exist to provoke resolution errors mv.visitLabel(tryLoadBegin); mv.visitMethodInsn(INVOKESTATIC, "NonExistentClass", "nonExistentMethod", "()V"); mv.visitLabel(tryLoadEnd); // No NoClassDefFoundError means NonExistentClass existed, which shouldn't happen mv.visitJumpInsn(GOTO, classExists); mv.visitFrame(F_SAME1, 0, new Object[0], 1, new Object[] { "java/lang/NoClassDefFoundError" }); mv.visitLabel(catchLoadBlock); // Ignore the expected NoClassDefFoundError mv.visitInsn(POP); }
Example 6
Source File: UnsupportedClassFileVersion.java From TencentKona-8 with GNU General Public License v2.0 | 6 votes |
public static void writeClassFile() throws Exception { ClassWriter cw = new ClassWriter(0); MethodVisitor mv; cw.visit(99, ACC_PUBLIC + ACC_SUPER, "ClassFile", null, "java/lang/Object", null); mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V", false); mv.visitInsn(RETURN); mv.visitMaxs(1, 1); mv.visitEnd(); cw.visitEnd(); try (FileOutputStream fos = new FileOutputStream(new File("ClassFile.class"))) { fos.write(cw.toByteArray()); } }
Example 7
Source File: RedefineRunningMethodsWithResolutionErrors.java From TencentKona-8 with GNU General Public License v2.0 | 6 votes |
private static void createMethodBody(MethodVisitor mv) { Label classExists = new Label(); // Cache resolution errors createLoadNonExistentClassCode(mv, classExists); // Redefine our own class and method mv.visitMethodInsn(INVOKESTATIC, "RedefineRunningMethodsWithResolutionErrors", "redefine", "()V"); // Provoke the same error again to make sure the resolution error cache works createLoadNonExistentClassCode(mv, classExists); // Test passed mv.visitInsn(RETURN); mv.visitFrame(F_SAME, 0, new Object[0], 0, new Object[0]); mv.visitLabel(classExists); createThrowRuntimeExceptionCode(mv, "Loaded class that shouldn't exist (\"NonExistentClass\")"); }
Example 8
Source File: TestPrivateInterfaceMethodReflect.java From openjdk-jdk8u-backup with GNU General Public License v2.0 | 5 votes |
private byte[] loadClassData(String name) throws Exception { ClassWriter cw = new ClassWriter(0); MethodVisitor mv; switch (name) { case INTERFACE_NAME: cw.visit(V1_8, ACC_ABSTRACT | ACC_INTERFACE | ACC_PUBLIC, INTERFACE_NAME, null, "java/lang/Object", null); { mv = cw.visitMethod(ACC_PRIVATE, "privInstance", "()I", null, null); mv.visitCode(); mv.visitLdcInsn(EXPECTED); mv.visitInsn(IRETURN); mv.visitMaxs(1, 1); mv.visitEnd(); } break; case CLASS_NAME: cw.visit(52, ACC_SUPER | ACC_PUBLIC, CLASS_NAME, null, "java/lang/Object", new String[]{INTERFACE_NAME}); { mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V"); mv.visitInsn(RETURN); mv.visitMaxs(1, 1); mv.visitEnd(); } break; default: break; } cw.visitEnd(); return cw.toByteArray(); }
Example 9
Source File: TestOSRWithNonEmptyStack.java From openjdk-jdk9 with GNU General Public License v2.0 | 5 votes |
private static void generateConstructor(ClassWriter classWriter) { MethodVisitor mv = classWriter.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V", false); mv.visitInsn(RETURN); mv.visitMaxs(0, 0); mv.visitEnd(); }
Example 10
Source File: TestMultiANewArray.java From openjdk-jdk9 with GNU General Public License v2.0 | 5 votes |
public static void writeClassFile(int cfv) throws Exception { ClassWriter cw = new ClassWriter(0); MethodVisitor mv; cw.visit(cfv, ACC_PUBLIC + ACC_SUPER, "ClassFile", null, "java/lang/Object", null); mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V", false); mv.visitInsn(RETURN); mv.visitMaxs(1, 1); mv.visitEnd(); mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "main", "([Ljava/lang/String;)V", null, null); mv.visitCode(); mv.visitInsn(ICONST_1); mv.visitInsn(ICONST_2); mv.visitMultiANewArrayInsn("[I", 2); mv.visitVarInsn(ASTORE, 1); mv.visitInsn(RETURN); mv.visitMaxs(2, 2); mv.visitEnd(); cw.visitEnd(); try (FileOutputStream fos = new FileOutputStream(new File("ClassFile.class"))) { fos.write(cw.toByteArray()); } }
Example 11
Source File: OverriderMsg.java From openjdk-jdk9 with GNU General Public License v2.0 | 5 votes |
public static void dump_Overrider () throws Exception { ClassWriter cw = new ClassWriter(0); MethodVisitor mv; cw.visit(V1_7, ACC_PUBLIC + ACC_SUPER, "Overrider", null, "HasFinal", null); { mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, "HasFinal", "<init>", "()V"); mv.visitInsn(RETURN); mv.visitMaxs(1, 1); mv.visitEnd(); } { mv = cw.visitMethod(ACC_PUBLIC, "m", "(Ljava/lang/String;)V", null, null); mv.visitCode(); mv.visitInsn(RETURN); mv.visitMaxs(0, 2); mv.visitEnd(); } { mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "main", "([Ljava/lang/String;)V", null, null); mv.visitCode(); mv.visitInsn(RETURN); mv.visitMaxs(0, 1); mv.visitEnd(); } cw.visitEnd(); try (FileOutputStream fos = new FileOutputStream(new File("Overrider.class"))) { fos.write(cw.toByteArray()); } }
Example 12
Source File: TestPrivateInterfaceMethodReflect.java From openjdk-8-source with GNU General Public License v2.0 | 5 votes |
private byte[] loadClassData(String name) throws Exception { ClassWriter cw = new ClassWriter(0); MethodVisitor mv; switch (name) { case INTERFACE_NAME: cw.visit(V1_8, ACC_ABSTRACT | ACC_INTERFACE | ACC_PUBLIC, INTERFACE_NAME, null, "java/lang/Object", null); { mv = cw.visitMethod(ACC_PRIVATE, "privInstance", "()I", null, null); mv.visitCode(); mv.visitLdcInsn(EXPECTED); mv.visitInsn(IRETURN); mv.visitMaxs(1, 1); mv.visitEnd(); } break; case CLASS_NAME: cw.visit(52, ACC_SUPER | ACC_PUBLIC, CLASS_NAME, null, "java/lang/Object", new String[]{INTERFACE_NAME}); { mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V"); mv.visitInsn(RETURN); mv.visitMaxs(1, 1); mv.visitEnd(); } break; default: break; } cw.visitEnd(); return cw.toByteArray(); }
Example 13
Source File: RedefineRunningMethodsWithResolutionErrors.java From openjdk-jdk9 with GNU General Public License v2.0 | 5 votes |
private static void createThrowRuntimeExceptionCode(MethodVisitor mv, String msg) { mv.visitTypeInsn(NEW, "java/lang/RuntimeException"); mv.visitInsn(DUP); mv.visitLdcInsn(msg); mv.visitMethodInsn(INVOKESPECIAL, "java/lang/RuntimeException", "<init>", "(Ljava/lang/String;)V"); mv.visitInsn(ATHROW); }
Example 14
Source File: MethodInsnNode.java From jdk8u-dev-jdk with GNU General Public License v2.0 | 4 votes |
@Override public void accept(final MethodVisitor mv) { mv.visitMethodInsn(opcode, owner, name, desc, itf); acceptAnnotations(mv); }
Example 15
Source File: TestAMEnotNPE.java From TencentKona-8 with GNU General Public License v2.0 | 4 votes |
/** * The bytecodes for a class p/T defining a methods test() and test(11args) * that contain an invokeExact of a particular methodHandle, I.m. * * Test will be passed values that may imperfectly implement I, * and thus may in turn throw exceptions. * * @return * @throws Exception */ public static byte[] bytesForT() throws Exception { ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); MethodVisitor mv; cw.visit(V1_8, ACC_PUBLIC + ACC_SUPER, "p/T", null, "java/lang/Object", null); { mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V"); mv.visitInsn(RETURN); mv.visitMaxs(0, 0); mv.visitEnd(); } // static int test(I) { mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "test", "(Lp/I;)I", null, null); mv.visitCode(); mv.visitLdcInsn(new Handle(Opcodes.H_INVOKEINTERFACE, "p/I", "m", "()I")); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/invoke/MethodHandle", "invokeExact", "(Lp/I;)I"); mv.visitInsn(IRETURN); mv.visitMaxs(0, 0); mv.visitEnd(); } // static int test(I,11args) { mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "test", "(Lp/I;BCSIJLjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)I", null, null); mv.visitCode(); mv.visitLdcInsn(new Handle(Opcodes.H_INVOKEINTERFACE, "p/I", "m", "(BCSIJLjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)I")); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ILOAD, 1); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ILOAD, 3); mv.visitVarInsn(ILOAD, 4); mv.visitVarInsn(LLOAD, 5); mv.visitVarInsn(ALOAD, 7); mv.visitVarInsn(ALOAD, 8); mv.visitVarInsn(ALOAD, 9); mv.visitVarInsn(ALOAD, 10); mv.visitVarInsn(ALOAD, 11); mv.visitVarInsn(ALOAD, 12); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/invoke/MethodHandle", "invokeExact", "(Lp/I;BCSIJLjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)I"); mv.visitInsn(IRETURN); mv.visitMaxs(0, 0); mv.visitEnd(); } cw.visitEnd(); return cw.toByteArray(); }
Example 16
Source File: TestConcreteClassWithAbstractMethod.java From openjdk-jdk9 with GNU General Public License v2.0 | 4 votes |
public static byte[] dumpT3() { ClassWriter cw = new ClassWriter(0); MethodVisitor mv; cw.visit(52, ACC_PUBLIC + ACC_SUPER, "p1/T3", null, "p1/T2", null); { mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, "p1/T2", "<init>", "()V", false); mv.visitInsn(RETURN); mv.visitMaxs(1, 1); mv.visitEnd(); } { mv = cw.visitMethod(ACC_PUBLIC, "m", "()I", null, null); mv.visitCode(); mv.visitFieldInsn(GETSTATIC, "java/lang/System", "out", "Ljava/io/PrintStream;"); mv.visitLdcInsn("p1/T3.m()"); mv.visitMethodInsn(INVOKEVIRTUAL, "java/io/PrintStream", "print", "(Ljava/lang/String;)V", false); mv.visitIntInsn(BIPUSH, 2); mv.visitInsn(IRETURN); mv.visitMaxs(2, 1); mv.visitEnd(); } { mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "test", "()I", null, null); mv.visitCode(); mv.visitTypeInsn(NEW, "p1/T3"); mv.visitInsn(DUP); mv.visitMethodInsn(INVOKESPECIAL, "p1/T3", "<init>", "()V", false); mv.visitMethodInsn(INVOKEVIRTUAL, "p1/T2", "m", "()I", false); mv.visitInsn(IRETURN); mv.visitMaxs(3, 2); mv.visitEnd(); } cw.visitEnd(); return cw.toByteArray(); }
Example 17
Source File: MethodInsnNode.java From nashorn with GNU General Public License v2.0 | 4 votes |
@Override public void accept(final MethodVisitor mv) { mv.visitMethodInsn(opcode, owner, name, desc); }
Example 18
Source File: TestAMEnotNPE.java From openjdk-8 with GNU General Public License v2.0 | 4 votes |
/** * The bytecodes for a class p/T defining a methods test() and test(11args) * that contain an invokeExact of a particular methodHandle, I.m. * * Test will be passed values that may imperfectly implement I, * and thus may in turn throw exceptions. * * @return * @throws Exception */ public static byte[] bytesForT() throws Exception { ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_FRAMES | ClassWriter.COMPUTE_MAXS); MethodVisitor mv; cw.visit(V1_8, ACC_PUBLIC + ACC_SUPER, "p/T", null, "java/lang/Object", null); { mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V"); mv.visitInsn(RETURN); mv.visitMaxs(0, 0); mv.visitEnd(); } // static int test(I) { mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "test", "(Lp/I;)I", null, null); mv.visitCode(); mv.visitLdcInsn(new Handle(Opcodes.H_INVOKEINTERFACE, "p/I", "m", "()I")); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/invoke/MethodHandle", "invokeExact", "(Lp/I;)I"); mv.visitInsn(IRETURN); mv.visitMaxs(0, 0); mv.visitEnd(); } // static int test(I,11args) { mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "test", "(Lp/I;BCSIJLjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)I", null, null); mv.visitCode(); mv.visitLdcInsn(new Handle(Opcodes.H_INVOKEINTERFACE, "p/I", "m", "(BCSIJLjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)I")); mv.visitVarInsn(ALOAD, 0); mv.visitVarInsn(ILOAD, 1); mv.visitVarInsn(ILOAD, 2); mv.visitVarInsn(ILOAD, 3); mv.visitVarInsn(ILOAD, 4); mv.visitVarInsn(LLOAD, 5); mv.visitVarInsn(ALOAD, 7); mv.visitVarInsn(ALOAD, 8); mv.visitVarInsn(ALOAD, 9); mv.visitVarInsn(ALOAD, 10); mv.visitVarInsn(ALOAD, 11); mv.visitVarInsn(ALOAD, 12); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/invoke/MethodHandle", "invokeExact", "(Lp/I;BCSIJLjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)I"); mv.visitInsn(IRETURN); mv.visitMaxs(0, 0); mv.visitEnd(); } cw.visitEnd(); return cw.toByteArray(); }
Example 19
Source File: Type.java From TencentKona-8 with GNU General Public License v2.0 | 4 votes |
static void invokestatic(final MethodVisitor method, final Call call) { method.visitMethodInsn(INVOKESTATIC, call.className(), call.name(), call.descriptor(), false); }
Example 20
Source File: EventHandlerCreator.java From dragonwell8_jdk with GNU General Public License v2.0 | 4 votes |
private void visitMethod(final MethodVisitor mv, final int opcode, final Type type, final Method method) { mv.visitMethodInsn(opcode, type.getInternalName(), method.getName(), method.getDescriptor(), false); }