List of usage examples for org.objectweb.asm MethodVisitor visitJumpInsn
public void visitJumpInsn(final int opcode, final Label label)
From source file:org.graalvm.compiler.replacements.test.DeoptimizeOnExceptionTest.java
License:Open Source License
private static byte[] makeClazz() { // Code generated the class below using asm. String clazzName = DeoptimizeOnExceptionTest.class.getName().replace('.', '/'); final ClassWriter w = new ClassWriter(0); w.visit(Opcodes.V1_5, Opcodes.ACC_PUBLIC, "t/TestJSR", null, "java/lang/Object", new String[] { "java/lang/Runnable" }); MethodVisitor mv = w.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "()V", null, new String[] {}); mv.visitCode();/* w ww.j av a 2 s. com*/ mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object", "<init>", "()V", false); mv.visitInsn(Opcodes.RETURN); mv.visitMaxs(10, 10); mv.visitEnd(); mv = w.visitMethod(Opcodes.ACC_PUBLIC, "run", "()V", null, null); mv.visitCode(); mv.visitMethodInsn(Opcodes.INVOKESTATIC, clazzName, "getM", "()Ljava/lang/Object;", false); Label l1 = new Label(); mv.visitJumpInsn(Opcodes.JSR, l1); mv.visitInsn(Opcodes.RETURN); mv.visitLabel(l1); mv.visitVarInsn(Opcodes.ASTORE, 1); Label lElse = new Label(); Label lEnd = new Label(); mv.visitMethodInsn(Opcodes.INVOKESTATIC, "java/lang/System", "currentTimeMillis", "()J", false); mv.visitInsn(Opcodes.POP2); mv.visitMethodInsn(Opcodes.INVOKESTATIC, clazzName, "getM", "()Ljava/lang/Object;", false); mv.visitInsn(Opcodes.DUP); mv.visitJumpInsn(Opcodes.IFNULL, lElse); mv.visitMethodInsn(Opcodes.INVOKESTATIC, clazzName, "methodA", "()V", false); mv.visitJumpInsn(Opcodes.GOTO, lEnd); mv.visitLabel(lElse); mv.visitMethodInsn(Opcodes.INVOKESTATIC, clazzName, "methodB", "()V", false); mv.visitLabel(lEnd); mv.visitVarInsn(Opcodes.RET, 1); mv.visitMaxs(10, 10); mv.visitEnd(); return w.toByteArray(); }
From source file:org.gradle.model.internal.manage.schema.extract.ManagedProxyClassGenerator.java
License:Apache License
private void writeEqualsMethod(ClassVisitor cw, Type generatedType) { MethodVisitor methodVisitor = cw.visitMethod(Opcodes.ACC_PUBLIC, "equals", EQUALS_METHOD_DESCRIPTOR, null, null);/* ww w .ja v a 2 s . c om*/ methodVisitor.visitCode(); // if (arg == this) { return true; } methodVisitor.visitVarInsn(ALOAD, 0); methodVisitor.visitVarInsn(ALOAD, 1); Label notSameLabel = new Label(); methodVisitor.visitJumpInsn(IF_ACMPNE, notSameLabel); methodVisitor.visitInsn(ICONST_1); methodVisitor.visitInsn(IRETURN); // if (!(age instanceof GeneratedView)) { return false; } methodVisitor.visitLabel(notSameLabel); methodVisitor.visitVarInsn(ALOAD, 1); methodVisitor.visitTypeInsn(INSTANCEOF, GENERATED_VIEW_TYPE.getInternalName()); Label generatedViewLabel = new Label(); methodVisitor.visitJumpInsn(IFNE, generatedViewLabel); methodVisitor.visitInsn(ICONST_0); methodVisitor.visitInsn(IRETURN); // return state.equals(((GeneratedView)arg).__view_state()); methodVisitor.visitLabel(generatedViewLabel); putStateFieldValueOnStack(methodVisitor, generatedType); methodVisitor.visitVarInsn(ALOAD, 1); methodVisitor.visitTypeInsn(CHECKCAST, GENERATED_VIEW_TYPE.getInternalName()); methodVisitor.visitMethodInsn(INVOKEINTERFACE, GENERATED_VIEW_TYPE.getInternalName(), "__view_state__", GET_VIEW_STATE_METHOD_DESCRIPTOR, true); methodVisitor.visitMethodInsn(INVOKEINTERFACE, GENERATED_VIEW_STATE_TYPE_NAME, "equals", EQUALS_METHOD_DESCRIPTOR, true); finishVisitingMethod(methodVisitor, Opcodes.IRETURN); }
From source file:org.gradle.model.internal.manage.schema.extract.ManagedProxyClassGenerator.java
License:Apache License
private void jumpToLabelIfStackEvaluatesToTrue(MethodVisitor methodVisitor, Label label) { methodVisitor.visitJumpInsn(IFNE, label); }
From source file:org.gradle.model.internal.manage.schema.extract.ManagedProxyClassGenerator.java
License:Apache License
private void unboxType(MethodVisitor methodVisitor, Class<?> primitiveClass) { // Float f = (Float) tmp // f==null?0:f.floatValue() Class<?> boxedType = BOXED_TYPES.get(primitiveClass); Type primitiveType = Type.getType(primitiveClass); methodVisitor.visitTypeInsn(CHECKCAST, Type.getInternalName(boxedType)); methodVisitor.visitInsn(DUP);/* ww w . j a v a 2s . c om*/ Label exit = new Label(); Label elseValue = new Label(); methodVisitor.visitJumpInsn(IFNONNULL, elseValue); methodVisitor.visitInsn(POP); pushDefaultValue(methodVisitor, primitiveClass); methodVisitor.visitJumpInsn(GOTO, exit); methodVisitor.visitLabel(elseValue); methodVisitor.visitMethodInsn(INVOKEVIRTUAL, Type.getInternalName(boxedType), primitiveClass.getSimpleName() + "Value", Type.getMethodDescriptor(primitiveType), false); methodVisitor.visitLabel(exit); }
From source file:org.jacoco.core.instr.ClassFileVersionsTest.java
License:Open Source License
/** * Creates a class that requires a frame before the return statement. Also * for this class instrumentation should insert another frame. * * <code><pre>//from www . j av a2s. c o m * public class Sample { * public Sample(boolean b){ * if(b){ * toString(); * } * return; * } * } * </pre></code> */ private byte[] createClass(int version, boolean frames) { ClassWriter cw = new ClassWriter(0); MethodVisitor mv; cw.visit(version, ACC_PUBLIC + ACC_SUPER, "org/jacoco/test/Sample", null, "java/lang/Object", null); mv = cw.visitMethod(ACC_PUBLIC, "<init>", "(Z)V", null, null); mv.visitCode(); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V", false); mv.visitVarInsn(ILOAD, 1); Label l1 = new Label(); mv.visitJumpInsn(IFEQ, l1); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Object", "toString", "()Ljava/lang/String;", false); mv.visitInsn(POP); mv.visitLabel(l1); if (frames) { mv.visitFrame(F_NEW, 2, new Object[] { "org/jacoco/test/Sample", Opcodes.INTEGER }, 0, new Object[] {}); } mv.visitInsn(RETURN); mv.visitMaxs(1, 2); mv.visitEnd(); cw.visitEnd(); return cw.toByteArray(); }
From source file:org.jacoco.core.instr.ResizeInstructionsTest.java
License:Open Source License
/** * Adds code that requires/*from www .jav a 2 s . co m*/ * {@link ClassWriter#getCommonSuperClass(String, String)}. * * <pre> * Object o = this; * while (true) { * o = (Integer) null; * } * </pre> */ private static void addCauseOfGetCommonSuperClass(final MethodVisitor mv) { mv.visitVarInsn(Opcodes.ALOAD, 0); mv.visitVarInsn(Opcodes.ASTORE, 1); Label label = new Label(); mv.visitLabel(label); mv.visitInsn(Opcodes.ACONST_NULL); mv.visitTypeInsn(Opcodes.CHECKCAST, "java/lang/Integer"); mv.visitVarInsn(Opcodes.ASTORE, 1); mv.visitJumpInsn(Opcodes.GOTO, label); }
From source file:org.jacoco.core.instr.ResizeInstructionsTest.java
License:Open Source License
/** * Adds code that triggers usage of// w w w . j a va2s .c o m * {@link org.objectweb.asm.MethodWriter#COMPUTE_INSERTED_FRAMES} during * instrumentation. */ private static void addCauseOfResizeInstructions(final MethodVisitor mv) { mv.visitInsn(Opcodes.ICONST_0); mv.visitInsn(Opcodes.ICONST_1); final Label target = new Label(); mv.visitJumpInsn(Opcodes.IFLE, target); for (int i = 0; i < Short.MAX_VALUE; i++) { mv.visitInsn(Opcodes.NOP); } mv.visitLabel(target); }
From source file:org.jacoco.core.internal.instr.ClassFieldProbeArrayStrategy.java
License:Open Source License
private void createInitMethod(final ClassVisitor cv, final int probeCount) { final MethodVisitor mv = cv.visitMethod(InstrSupport.INITMETHOD_ACC, InstrSupport.INITMETHOD_NAME, InstrSupport.INITMETHOD_DESC, null, null); mv.visitCode();// w w w. j a va2 s. c om // Load the value of the static data field: mv.visitFieldInsn(Opcodes.GETSTATIC, className, InstrSupport.DATAFIELD_NAME, InstrSupport.DATAFIELD_DESC); mv.visitInsn(Opcodes.DUP); // Stack[1]: [Z // Stack[0]: [Z // Skip initialization when we already have a data array: final Label alreadyInitialized = new Label(); mv.visitJumpInsn(Opcodes.IFNONNULL, alreadyInitialized); // Stack[0]: [Z mv.visitInsn(Opcodes.POP); final int size = genInitializeDataField(mv, probeCount); // Stack[0]: [Z // Return the class' probe array: if (withFrames) { mv.visitFrame(Opcodes.F_NEW, 0, FRAME_LOCALS_EMPTY, 1, FRAME_STACK_ARRZ); } mv.visitLabel(alreadyInitialized); mv.visitInsn(Opcodes.ARETURN); mv.visitMaxs(Math.max(size, 2), 0); // Maximum local stack size is 2 mv.visitEnd(); }
From source file:org.jacoco.core.internal.instr.InterfaceFieldProbeArrayStrategy.java
License:Open Source License
private void createInitMethod(final ClassVisitor cv, final int probeCount) { final MethodVisitor mv = cv.visitMethod(InstrSupport.INITMETHOD_ACC, InstrSupport.INITMETHOD_NAME, InstrSupport.INITMETHOD_DESC, null, null); mv.visitCode();//from ww w . ja va 2 s . c om // Load the value of the static data field: mv.visitFieldInsn(Opcodes.GETSTATIC, className, InstrSupport.DATAFIELD_NAME, InstrSupport.DATAFIELD_DESC); mv.visitInsn(Opcodes.DUP); // Stack[1]: [Z // Stack[0]: [Z // Skip initialization when we already have a data array: final Label alreadyInitialized = new Label(); mv.visitJumpInsn(Opcodes.IFNONNULL, alreadyInitialized); // Stack[0]: [Z mv.visitInsn(Opcodes.POP); final int size = accessorGenerator.generateDataAccessor(classId, className, probeCount, mv); // Stack[0]: [Z // Return the class' probe array: mv.visitFrame(Opcodes.F_NEW, 0, FRAME_LOCALS_EMPTY, 1, FRAME_STACK_ARRZ); mv.visitLabel(alreadyInitialized); mv.visitInsn(Opcodes.ARETURN); mv.visitMaxs(Math.max(size, 2), 0); // Maximum local stack size is 2 mv.visitEnd(); }
From source file:org.javachannel.examples.brokenverifier.VerifierTest.java
License:Apache License
@Test public void generateComparator() { final String slashName = "test/Verifier"; final Object[] EMPTY_OBJECT_ARRAY = new Object[0]; ClassWriter cw = new ClassWriter(0); cw.visit(V1_7, ACC_PUBLIC | ACC_SYNTHETIC, slashName, null, "java/util/HashSet", null); Label lOtherSuper = new Label(); Label lDoSomething = new Label(); MethodVisitor mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null); mv.visitCode();/*from ww w . j av a 2s . co m*/ mv.visitFrame(F_NEW, 1, new Object[] { UNINITIALIZED_THIS }, 0, EMPTY_OBJECT_ARRAY); mv.visitJumpInsn(GOTO, lOtherSuper); mv.visitFrame(F_NEW, 1, new Object[] { UNINITIALIZED_THIS }, 0, EMPTY_OBJECT_ARRAY); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKESPECIAL, "java/util/HashSet", "<init>", "()V", false); mv.visitFrame(F_NEW, 1, new Object[] { slashName }, 0, EMPTY_OBJECT_ARRAY); mv.visitLabel(lDoSomething); mv.visitVarInsn(ALOAD, 0); mv.visitMethodInsn(INVOKEVIRTUAL, "java/util/HashSet", "size", "()I", false); mv.visitInsn(POP); mv.visitInsn(RETURN); mv.visitFrame(F_NEW, 1, new Object[] { UNINITIALIZED_THIS }, 0, EMPTY_OBJECT_ARRAY); mv.visitLabel(lOtherSuper); mv.visitVarInsn(ALOAD, 0); mv.visitIntInsn(BIPUSH, 1); mv.visitMethodInsn(INVOKESPECIAL, "java/util/HashSet", "<init>", "(I)V", false); mv.visitJumpInsn(GOTO, lDoSomething); mv.visitMaxs(3, 1); mv.visitEnd(); cw.visitEnd(); byte[] b = cw.toByteArray(); MyClassLoader cl = new MyClassLoader(); Class c = cl.defineClass(slashName.replace('/', '.'), b); Method[] m = c.getMethods(); }