Package org.ow2.asm

Examples of org.ow2.asm.MethodVisitor


        generate(dir, "pkg/InvokeDynamic.class", dump());
    }

    public byte[] dump() {
        ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
        MethodVisitor mv;

        cw.visit(V1_7,
                ACC_PUBLIC,
                "pkg/InvokeDynamic",
                null,
                "java/lang/Object",
                null);

        mv = cw.visitMethod(ACC_PUBLIC, "foo", "()V", null, null);
        mv.visitCode();
        Handle h = new Handle(H_INVOKESTATIC,
                "C",
                "bsm",
                "(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;)Ljava/lang/invoke/CallSite;");
        mv.visitInvokeDynamicInsn("bar", "()V", h, Type.getType("()V"), h);
        mv.visitInsn(RETURN);
        mv.visitEnd();

        cw.visitEnd();
        return cw.toByteArray();
    }
View Full Code Here


                final String name,
                final String desc,
                final String signature,
                final String[] exceptions)
            {
                MethodVisitor mv = cv.visitMethod(access,
                        name,
                        desc,
                        signature,
                        exceptions);
                return new CodeSizeEvaluator(mv) {
                    @Override
                    public void visitMaxs(
                        final int maxStack,
                        final int maxLocals)
                    {
                        Label end = new Label();
                        mv.visitLabel(end);
                        mv.visitMaxs(maxStack, maxLocals);
                        int size = end.getOffset();
                        assertTrue(getMinSize() + " <= " + size + " <= "
                                + getMaxSize(), getMinSize() <= size
                                && size <= getMaxSize());
                    }
View Full Code Here

            final String name,
            final String desc,
            final String signature,
            final String[] exceptions)
        {
            MethodVisitor mv = cv.visitMethod(access,
                    name,
                    desc,
                    signature,
                    exceptions);
View Full Code Here

            final String name,
            final String desc,
            final String signature,
            final String[] exceptions)
        {
            MethodVisitor mv = cv.visitMethod(access,
                    name,
                    desc,
                    signature,
                    exceptions);
View Full Code Here

        generate(dir, "pkg/FrameMap.class", cw.toByteArray());
    }

    public byte[] dump() {
        ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
        MethodVisitor mv;
        FieldVisitor fv;

        cw.visit(V1_6,
                ACC_PUBLIC + ACC_SUPER,
                "pkg/FrameTable",
                null,
                "java/lang/Object",
                null);

        fv = cw.visitField(M, "long", "Ljava/lang/Long;", null, null);
        fv.visitEnd();

        fv = cw.visitField(M, "double", "Ljava/lang/Double;", null, null);
        fv.visitEnd();

        fv = cw.visitField(M, "number", "Ljava/lang/Number;", null, null);
        fv.visitEnd();

        fv = cw.visitField(M, "serializable", I1, null, null);
        fv.visitEnd();

        fv = cw.visitField(M, "comparable", I2, null, null);
        fv.visitEnd();

        fv = cw.visitField(M, "longArray", "[Ljava/lang/Long;", null, null);
        fv.visitEnd();

        fv = cw.visitField(M, "intArray", "[I", null, null);
        fv.visitEnd();

        fv = cw.visitField(M, "floatArray", "[F", null, null);
        fv.visitEnd();

        fv = cw.visitField(M, "objectArray", "[Ljava/lang/Object;", null, null);
        fv.visitEnd();

        mv = cw.visitMethod(ACC_PUBLIC,
                "<init>",
                "(Ljava/lang/Object;)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();

        uninitializedThisType(cw);
        uninitializedLocalType(cw);
        uninitializedStackType(cw);
        nullType(cw);
View Full Code Here

        return cw.toByteArray();
    }

    private void uninitializedThisType(final ClassWriter cw) {
        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC,
                "<init>",
                "(I)V",
                null,
                null);
        mv.visitCode();
        mv.visitVarInsn(ALOAD, 0);
        Label l0 = new Label();
        mv.visitLabel(l0);
        mv.visitTypeInsn(NEW, "pkg/FrameTable");
        mv.visitInsn(DUP);
        mv.visitVarInsn(ILOAD, 1);
        Label l1 = new Label();
        mv.visitJumpInsn(IFNE, l1);
        mv.visitInsn(ACONST_NULL);
        Label l2 = new Label();
        mv.visitJumpInsn(GOTO, l2);
        mv.visitFrame(F_FULL,
                2,
                new Object[] { UNINITIALIZED_THIS, INTEGER },
                3,
                new Object[] { UNINITIALIZED_THIS, l0, l0 });
        mv.visitLabel(l1);
        mv.visitTypeInsn(NEW, "java/lang/Object");
        mv.visitInsn(DUP);
        mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V");
        mv.visitFrame(F_FULL,
                2,
                new Object[] { UNINITIALIZED_THIS, INTEGER },
                4,
                new Object[] { UNINITIALIZED_THIS, l0, l0, "java/lang/Object" });
        mv.visitLabel(l2);
        mv.visitMethodInsn(INVOKESPECIAL,
                "pkg/FrameTable",
                "<init>",
                "(Ljava/lang/Object;)V");
        mv.visitMethodInsn(INVOKESPECIAL,
                "pkg/FrameTable",
                "<init>",
                "(Ljava/lang/Object;)V");
        mv.visitInsn(RETURN);
        mv.visitMaxs(0, 0);
        mv.visitEnd();
    }
View Full Code Here

        mv.visitMaxs(0, 0);
        mv.visitEnd();
    }

    private void castInsns(final ClassWriter cw) {
        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC,
                "castInsns",
                "(IJFD)V",
                null,
                null);
        // I2x
        mv.visitVarInsn(ILOAD, 1);
        mv.visitInsn(I2L);
        mv.visitVarInsn(LSTORE, 2);
        mv.visitVarInsn(ILOAD, 1);
        mv.visitInsn(I2F);
        mv.visitVarInsn(FSTORE, 4);
        mv.visitVarInsn(ILOAD, 1);
        mv.visitInsn(I2D);
        mv.visitVarInsn(DSTORE, 5);
        // L2x
        mv.visitVarInsn(LLOAD, 2);
        mv.visitInsn(L2I);
        mv.visitVarInsn(ISTORE, 1);
        mv.visitVarInsn(LLOAD, 2);
        mv.visitInsn(L2F);
        mv.visitVarInsn(FSTORE, 4);
        mv.visitVarInsn(LLOAD, 2);
        mv.visitInsn(L2D);
        mv.visitVarInsn(DSTORE, 5);
        // F2x
        mv.visitVarInsn(FLOAD, 4);
        mv.visitInsn(F2I);
        mv.visitVarInsn(ISTORE, 1);
        mv.visitVarInsn(FLOAD, 4);
        mv.visitInsn(F2L);
        mv.visitVarInsn(LSTORE, 2);
        mv.visitVarInsn(FLOAD, 4);
        mv.visitInsn(F2D);
        mv.visitVarInsn(DSTORE, 5);
        // D2x
        mv.visitVarInsn(DLOAD, 5);
        mv.visitInsn(D2I);
        mv.visitVarInsn(ISTORE, 1);
        mv.visitVarInsn(DLOAD, 5);
        mv.visitInsn(D2L);
        mv.visitVarInsn(LSTORE, 2);
        mv.visitVarInsn(DLOAD, 5);
        mv.visitInsn(D2F);
        mv.visitVarInsn(FSTORE, 4);
        // I2B
        mv.visitVarInsn(ALOAD, 0);
        mv.visitVarInsn(ILOAD, 1);
        mv.visitInsn(I2B);
        mv.visitFieldInsn(PUTFIELD, "pkg/Insns", "b", "B");
        // I2C
        mv.visitVarInsn(ALOAD, 0);
        mv.visitVarInsn(ILOAD, 1);
        mv.visitInsn(I2C);
        mv.visitFieldInsn(PUTFIELD, "pkg/Insns", "c", "C");
        // I2S
        mv.visitVarInsn(ILOAD, 1);
        mv.visitInsn(I2S);
        mv.visitFieldInsn(PUTSTATIC, "pkg/Insns", "s", "S");
        // checkcast
        mv.visitInsn(ACONST_NULL);
        mv.visitTypeInsn(CHECKCAST, "java/lang/String");
        mv.visitInsn(ACONST_NULL);
        mv.visitTypeInsn(CHECKCAST, "[[I");
        // instanceof
        mv.visitInsn(ACONST_NULL);
        mv.visitTypeInsn(INSTANCEOF, "java/lang/String");
        // end method
        mv.visitInsn(RETURN);
        mv.visitMaxs(0, 0);
        mv.visitEnd();
    }
View Full Code Here

        mv.visitMaxs(0, 0);
        mv.visitEnd();
    }

    private void jumpInsns(final ClassWriter cw) {
        MethodVisitor mv = cw.visitMethod(ACC_PUBLIC,
                "jumpInsns",
                "(IJFD)V",
                null,
                null);
        Label l0 = new Label();
        // ifxx
        mv.visitVarInsn(ILOAD, 1);
        mv.visitJumpInsn(IFNE, l0);
        mv.visitVarInsn(ILOAD, 1);
        mv.visitJumpInsn(IFEQ, l0);
        mv.visitVarInsn(ILOAD, 1);
        mv.visitJumpInsn(IFLE, l0);
        mv.visitVarInsn(ILOAD, 1);
        mv.visitJumpInsn(IFGE, l0);
        mv.visitVarInsn(ILOAD, 1);
        mv.visitJumpInsn(IFLT, l0);
        mv.visitVarInsn(ILOAD, 1);
        mv.visitJumpInsn(IFGT, l0);
        // ificmpxx
        mv.visitVarInsn(ILOAD, 1);
        mv.visitVarInsn(ILOAD, 1);
        mv.visitJumpInsn(IF_ICMPNE, l0);
        mv.visitVarInsn(ILOAD, 1);
        mv.visitVarInsn(ILOAD, 1);
        mv.visitJumpInsn(IF_ICMPEQ, l0);
        mv.visitVarInsn(ILOAD, 1);
        mv.visitVarInsn(ILOAD, 1);
        mv.visitJumpInsn(IF_ICMPLE, l0);
        mv.visitVarInsn(ILOAD, 1);
        mv.visitVarInsn(ILOAD, 1);
        mv.visitJumpInsn(IF_ICMPGE, l0);
        mv.visitVarInsn(ILOAD, 1);
        mv.visitVarInsn(ILOAD, 1);
        mv.visitJumpInsn(IF_ICMPLT, l0);
        mv.visitVarInsn(ILOAD, 1);
        mv.visitVarInsn(ILOAD, 1);
        mv.visitJumpInsn(IF_ICMPGT, l0);
        // lcmp
        mv.visitVarInsn(LLOAD, 2);
        mv.visitVarInsn(LLOAD, 2);
        mv.visitInsn(LCMP);
        mv.visitJumpInsn(IFNE, l0);
        // fcmpx
        mv.visitVarInsn(FLOAD, 4);
        mv.visitVarInsn(FLOAD, 4);
        mv.visitInsn(FCMPL);
        mv.visitJumpInsn(IFNE, l0);
        mv.visitVarInsn(FLOAD, 4);
        mv.visitVarInsn(FLOAD, 4);
        mv.visitInsn(FCMPG);
        mv.visitJumpInsn(IFNE, l0);
        // dcmpx
        mv.visitVarInsn(DLOAD, 5);
        mv.visitVarInsn(DLOAD, 5);
        mv.visitInsn(DCMPL);
        mv.visitJumpInsn(IFNE, l0);
        mv.visitVarInsn(DLOAD, 5);
        mv.visitVarInsn(DLOAD, 5);
        mv.visitInsn(DCMPG);
        mv.visitJumpInsn(IFNE, l0);
        // ifacmp
        mv.visitVarInsn(ALOAD, 0);
        mv.visitVarInsn(ALOAD, 0);
        mv.visitJumpInsn(IF_ACMPNE, l0);
        mv.visitVarInsn(ALOAD, 0);
        mv.visitVarInsn(ALOAD, 0);
        mv.visitJumpInsn(IF_ACMPEQ, l0);
        // ifnull
        mv.visitVarInsn(ALOAD, 0);
        mv.visitJumpInsn(IFNULL, l0);
        mv.visitInsn(ICONST_0);
        mv.visitVarInsn(ISTORE, 7);
        mv.visitVarInsn(ALOAD, 0);
        mv.visitJumpInsn(IFNONNULL, l0);
        mv.visitInsn(ICONST_0);
        mv.visitVarInsn(ISTORE, 7);
        mv.visitVarInsn(ALOAD, 0);
        // tableswitch
        Label l1 = new Label();
        Label l2 = new Label();
        Label l3 = new Label();
        mv.visitVarInsn(ILOAD, 1);
        mv.visitTableSwitchInsn(0, 2, l3/*default*/, l1, l2, l3 );
        mv.visitLabel(l1);
        mv.visitInsn(ICONST_1);
        mv.visitVarInsn(ISTORE, 7);
        mv.visitJumpInsn(GOTO, l3);
        mv.visitLabel(l2);
        mv.visitInsn(ICONST_2);
        mv.visitVarInsn(ISTORE, 7);
        mv.visitJumpInsn(GOTO, l3);
        mv.visitLabel(l3);
        mv.visitVarInsn(ILOAD, 7);
        // lookupswitch
        Label l4 = new Label();
        Label l5 = new Label();
        Label l6 = new Label();
        mv.visitVarInsn(ILOAD, 1);
        mv.visitLookupSwitchInsn(l6, new int[] { 0, 1, 2 }, new Label[] {
            l4,
            l5,
            l6 });
        mv.visitLabel(l4);
        mv.visitInsn(ICONST_1);
        mv.visitVarInsn(ISTORE, 7);
        mv.visitJumpInsn(GOTO, l6);
        mv.visitLabel(l5);
        mv.visitInsn(ICONST_2);
        mv.visitVarInsn(ISTORE, 7);
        mv.visitJumpInsn(GOTO, l6);
        mv.visitLabel(l6);
        mv.visitVarInsn(ILOAD, 7);
        // throw
        mv.visitInsn(ACONST_NULL);
        mv.visitInsn(ATHROW);
        // misc instructions to cover code in MethodWriter.resizeInsns
        mv.visitLabel(l0);
        mv.visitInsn(ICONST_1);
        mv.visitInsn(ICONST_2);
        mv.visitMultiANewArrayInsn("[[I", 2);
        mv.visitVarInsn(ALOAD, 0);
        mv.visitMethodInsn(INVOKEINTERFACE, "java/util/List", "size", "()V");
        // end method
        mv.visitInsn(RETURN);
        mv.visitMaxs(0, 0);
        mv.visitEnd();
    }
View Full Code Here

    }

    public byte[] dump() {
        ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
        FieldVisitor fv;
        MethodVisitor mv;

        cw.visit(V1_3,
                ACC_PUBLIC + ACC_SYNTHETIC,
                "pkg/Attribute",
                null,
                "java/lang/Object",
                null);

        cw.visitAttribute(new Comment());

        fv = cw.visitField(ACC_PUBLIC, "f", "I", null, null);
        fv.visitAttribute(new Comment());
        fv.visitEnd();

        mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
        mv.visitAttribute(new Comment());
        mv.visitCode();
        mv.visitVarInsn(ALOAD, 0);
        mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V");

        /*
         * the following instructions are designed so that this method will be
         * resized by the method resizing test, in order to cover the code that
         * recomputes the code attribute labels in the resizeInstructions method
         * (see MethodWriter).
         */
        Label l0 = new Label();
        mv.visitInsn(ICONST_0);
        mv.visitJumpInsn(IFEQ, l0);
        // many NOPs will be introduced here by the method resizing test
        mv.visitJumpInsn(GOTO, l0);
        mv.visitLabel(l0);

        mv.visitInsn(RETURN);
        mv.visitMaxs(0, 0);
        mv.visitAttribute(new CodeComment());
        mv.visitEnd();

        cw.visitEnd();
        return cw.toByteArray();
    }
View Full Code Here

    }

    public byte[] dump() {
        ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
        FieldVisitor fv;
        MethodVisitor mv;

        cw.visit(V1_5,
                ACC_PUBLIC + ACC_FINAL + ACC_SUPER + ACC_ENUM,
                "pkg/Enum",
                "Ljava/lang/Enum<Lpkg/Enum;>;",
                "java/lang/Enum",
                null);

        fv = cw.visitField(ACC_PUBLIC + ACC_FINAL + ACC_STATIC + ACC_ENUM,
                "V0",
                "Lpkg/Enum;",
                null,
                null);
        fv.visitEnd();

        fv = cw.visitField(ACC_PUBLIC + ACC_FINAL + ACC_STATIC + ACC_ENUM,
                "V1",
                "Lpkg/Enum;",
                null,
                null);
        fv.visitEnd();

        fv = cw.visitField(ACC_PUBLIC + ACC_FINAL + ACC_STATIC + ACC_ENUM,
                "V2",
                "Lpkg/Enum;",
                null,
                null);
        fv.visitEnd();

        fv = cw.visitField(ACC_PRIVATE + ACC_FINAL + ACC_STATIC + ACC_SYNTHETIC,
                "$VALUES",
                "[Lpkg/Enum;",
                null,
                null);
        fv.visitEnd();

        mv = cw.visitMethod(ACC_PUBLIC + ACC_FINAL + ACC_STATIC,
                "values",
                "()[Lpkg/Enum;",
                null,
                null);
        mv.visitCode();
        mv.visitFieldInsn(GETSTATIC, "pkg/Enum", "$VALUES", "[Lpkg/Enum;");
        mv.visitMethodInsn(INVOKEVIRTUAL,
                "[Lpkg/Enum;",
                "clone",
                "()Ljava/lang/Object;");
        mv.visitTypeInsn(CHECKCAST, "[Lpkg/Enum;");
        mv.visitInsn(ARETURN);
        mv.visitMaxs(0, 0);
        mv.visitEnd();

        mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC,
                "valueOf",
                "(Ljava/lang/String;)Lpkg/Enum;",
                null,
                null);
        mv.visitCode();
        mv.visitLdcInsn(Type.getType("Lpkg/Enum;"));
        mv.visitVarInsn(ALOAD, 0);
        mv.visitMethodInsn(INVOKESTATIC,
                "java/lang/Enum",
                "valueOf",
                "(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Enum;");
        mv.visitTypeInsn(CHECKCAST, "pkg/Enum");
        mv.visitInsn(ARETURN);
        mv.visitMaxs(0, 0);
        mv.visitEnd();

        mv = cw.visitMethod(ACC_PRIVATE,
                "<init>",
                "(Ljava/lang/String;I)V",
                "()V",
                null);
        mv.visitCode();
        mv.visitVarInsn(ALOAD, 0);
        mv.visitVarInsn(ALOAD, 1);
        mv.visitVarInsn(ILOAD, 2);
        mv.visitMethodInsn(INVOKESPECIAL,
                "java/lang/Enum",
                "<init>",
                "(Ljava/lang/String;I)V");
        mv.visitInsn(RETURN);
        mv.visitMaxs(0, 0);
        mv.visitEnd();

        mv = cw.visitMethod(ACC_STATIC, "<clinit>", "()V", null, null);
        mv.visitCode();
        mv.visitTypeInsn(NEW, "pkg/Enum");
        mv.visitInsn(DUP);
        mv.visitLdcInsn("V0");
        mv.visitInsn(ICONST_0);
        mv.visitMethodInsn(INVOKESPECIAL,
                "pkg/Enum",
                "<init>",
                "(Ljava/lang/String;I)V");
        mv.visitFieldInsn(PUTSTATIC, "pkg/Enum", "V0", "Lpkg/Enum;");
        mv.visitTypeInsn(NEW, "pkg/Enum");
        mv.visitInsn(DUP);
        mv.visitLdcInsn("V1");
        mv.visitInsn(ICONST_1);
        mv.visitMethodInsn(INVOKESPECIAL,
                "pkg/Enum",
                "<init>",
                "(Ljava/lang/String;I)V");
        mv.visitFieldInsn(PUTSTATIC, "pkg/Enum", "V1", "Lpkg/Enum;");
        mv.visitTypeInsn(NEW, "pkg/Enum");
        mv.visitInsn(DUP);
        mv.visitLdcInsn("V2");
        mv.visitInsn(ICONST_2);
        mv.visitMethodInsn(INVOKESPECIAL,
                "pkg/Enum",
                "<init>",
                "(Ljava/lang/String;I)V");
        mv.visitFieldInsn(PUTSTATIC, "pkg/Enum", "V2", "Lpkg/Enum;");
        mv.visitInsn(ICONST_3);
        mv.visitTypeInsn(ANEWARRAY, "pkg/Enum");
        mv.visitInsn(DUP);
        mv.visitInsn(ICONST_0);
        mv.visitFieldInsn(GETSTATIC, "pkg/Enum", "V0", "Lpkg/Enum;");
        mv.visitInsn(AASTORE);
        mv.visitInsn(DUP);
        mv.visitInsn(ICONST_1);
        mv.visitFieldInsn(GETSTATIC, "pkg/Enum", "V1", "Lpkg/Enum;");
        mv.visitInsn(AASTORE);
        mv.visitInsn(DUP);
        mv.visitInsn(ICONST_2);
        mv.visitFieldInsn(GETSTATIC, "pkg/Enum", "V2", "Lpkg/Enum;");
        mv.visitInsn(AASTORE);
        mv.visitFieldInsn(PUTSTATIC, "pkg/Enum", "$VALUES", "[Lpkg/Enum;");
        mv.visitInsn(RETURN);
        mv.visitMaxs(0, 0);
        mv.visitEnd();

        cw.visitEnd();

        return cw.toByteArray();
    }
View Full Code Here

TOP

Related Classes of org.ow2.asm.MethodVisitor

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.