Example usage for org.objectweb.asm ClassVisitor ClassVisitor

List of usage examples for org.objectweb.asm ClassVisitor ClassVisitor

Introduction

In this page you can find the example usage for org.objectweb.asm ClassVisitor ClassVisitor.

Prototype

public ClassVisitor(final int api) 

Source Link

Document

Constructs a new ClassVisitor .

Usage

From source file:com.github.rkaippully.jasm.test.ClassAnnotationsTest.java

License:Apache License

@Test
public void testAnnotations() {

    reader.accept(new ClassVisitor(ASM4) {
        private boolean visibleVisited;
        private boolean invisibleVisited;

        class VisibleAnnotationVisitor extends AnnotationVisitor {

            public VisibleAnnotationVisitor(String desc) {
                super(ASM4);
                assertEquals("javax/annotation/Generated", desc);
            }//from w  ww  .  jav  a2  s  .  c  om

            @Override
            public void visit(String name, Object value) {
                assertEquals("date", name);
                assertEquals("2001-07-04T12:08:56.235-0700", value);
            }

            @Override
            public void visitEnum(String name, String desc, String value) {
                fail("visitEnum called with name=" + name + ", value=" + value + ", desc = " + desc);
            }

            @Override
            public AnnotationVisitor visitAnnotation(String name, String desc) {
                fail("visitAnnotation called with name=" + name + ", desc = " + desc);
                return null;
            }

            @Override
            public AnnotationVisitor visitArray(String name) {
                assertEquals("value", name);
                return new AnnotationVisitor(ASM4) {
                    private List<Object> arrayEntries = new ArrayList<>(2);

                    @Override
                    public void visit(String name, Object value) {
                        arrayEntries.add(value);
                    }

                    @Override
                    public void visitEnd() {
                        assertEquals(2, arrayEntries.size());
                        assertEquals("codegen1", arrayEntries.get(0));
                        assertEquals("codegen2", arrayEntries.get(1));
                    }
                };
            }

            @Override
            public void visitEnd() {
                visibleVisited = true;
            }
        }

        class InvisibleAnnotationVisitor extends AnnotationVisitor {
            public InvisibleAnnotationVisitor(String desc) {
                super(ASM4);
                assertEquals("java/lang/Deprecated", desc);
            }

            @Override
            public void visit(String name, Object value) {
                fail("visit called with name=" + name + ", value=" + value);
            }

            @Override
            public void visitEnum(String name, String desc, String value) {
                fail("visitEnum called with name=" + name + ", value=" + value + ", desc = " + desc);
            }

            @Override
            public AnnotationVisitor visitAnnotation(String name, String desc) {
                fail("visitAnnotation called with name=" + name + ", desc = " + desc);
                return null;
            }

            @Override
            public AnnotationVisitor visitArray(String name) {
                fail("visitArray called with name=" + name);
                return null;
            }

            @Override
            public void visitEnd() {
                invisibleVisited = true;
            }
        }

        @Override
        public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
            if (visible)
                return new VisibleAnnotationVisitor(desc);
            else
                return new InvisibleAnnotationVisitor(desc);
        }

        @Override
        public void visitEnd() {
            assertTrue(visibleVisited);
            assertTrue(invisibleVisited);
        }
    }, 0);
}

From source file:com.github.rkaippully.jasm.test.ClassAttributesTest.java

License:Apache License

@Test
public void testSourceFileAndDebug() {
    reader.accept(new ClassVisitor(ASM4) {
        private String source;
        private String debug;

        @Override/*w w  w.j  a v a 2 s .  c  o  m*/
        public void visitSource(String source, String debug) {
            this.source = source;
            this.debug = debug;
        }

        @Override
        public void visitEnd() {
            // We need this outside visitSource() because visitSource() may
            // not get called if source and debug are null
            assertEquals("ClassAttributesTest.jasm", source);
            assertEquals("SMAP\n*E\n", debug);
        }
    }, 0);
}

From source file:com.github.rkaippully.jasm.test.ClassAttributesTest.java

License:Apache License

@Test
public void testInnerClass() {
    class InnerClassInfo implements Comparable<InnerClassInfo> {
        public String name;
        public String outerName;
        public String innerName;
        public int access;

        @Override/*from  w  ww  .j  a  v  a 2 s . c o  m*/
        public int compareTo(InnerClassInfo that) {
            return this.name.compareTo(that.name);
        }
    }

    reader.accept(new ClassVisitor(ASM4) {
        private Set<InnerClassInfo> innerClasses = new TreeSet<>();

        @Override
        public void visitInnerClass(String name, String outerName, String innerName, int access) {
            InnerClassInfo innerClass = new InnerClassInfo();
            innerClass.name = name;
            innerClass.outerName = outerName;
            innerClass.innerName = innerName;
            innerClass.access = access;
            innerClasses.add(innerClass);
        }

        @Override
        public void visitEnd() {
            assertEquals(3, innerClasses.size());

            Iterator<InnerClassInfo> itr = innerClasses.iterator();

            InnerClassInfo innerClass = itr.next();
            assertEquals("com/github/rkaippully/jasm/test/gen/ClassAttributesTest$InnerClass1",
                    innerClass.name);
            assertEquals("com/github/rkaippully/jasm/test/gen/ClassAttributesTest", innerClass.outerName);
            assertEquals("InnerClass1", innerClass.innerName);
            assertEquals(ACC_PROTECTED | ACC_STATIC, innerClass.access);

            innerClass = itr.next();
            assertEquals("com/github/rkaippully/jasm/test/gen/ClassAttributesTest$InnerClass2",
                    innerClass.name);
            assertNull(innerClass.outerName);
            assertEquals("InnerClass2", innerClass.innerName);
            assertEquals(ACC_FINAL, innerClass.access);

            innerClass = itr.next();
            assertEquals("com/github/rkaippully/jasm/test/gen/ClassAttributesTest$InnerClass3",
                    innerClass.name);
            assertNull(innerClass.outerName);
            assertNull(innerClass.innerName);
            assertEquals(ACC_FINAL, innerClass.access);
        }
    }, 0);
}

From source file:com.github.rkaippully.jasm.test.ClassAttributesTest.java

License:Apache License

@Test
public void testEnclosingMethod() {
    reader.accept(new ClassVisitor(ASM4) {
        private String outerClass;
        private String methodName;
        private String methodDesc;

        @Override//from  w w  w. j  a v a  2 s .com
        public void visitOuterClass(String outerClass, String methodName, String methodDesc) {
            this.outerClass = outerClass;
            this.methodName = methodName;
            this.methodDesc = methodDesc;
        }

        @Override
        public void visitEnd() {
            assertEquals("com/github/rkaippully/jasm/test/gen/ClassAttributesTestOuter", outerClass);
            assertEquals("enclosingMethod", methodName);
            assertEquals("V", methodDesc);
        }
    }, 0);
}

From source file:com.github.rkaippully.jasm.test.ClassAttributesTest.java

License:Apache License

@Test
public void testSynthetic() {
    reader.accept(new ClassVisitor(ASM4) {
        static final int ACC_SYNTHETIC_ATTRIBUTE = 0x40000;
        private boolean synthetic;

        @Override//from w  w  w  . ja v a  2s .  c o m
        public void visit(int version, int access, String name, String signature, String superName,
                String[] interfaces) {
            // This is how ASM reports synthetic attribute
            if ((access & ACC_SYNTHETIC_ATTRIBUTE) != 0)
                this.synthetic = true;
        }

        @Override
        public void visitEnd() {
            assertTrue(synthetic);
        }
    }, 0);
}

From source file:com.github.rkaippully.jasm.test.ClassAttributesTest.java

License:Apache License

@Test
public void testSignature() {
    reader.accept(new ClassVisitor(ASM4) {
        private String signature;

        @Override/* w  w w  . j  a  v  a  2  s .c  o  m*/
        public void visit(int version, int access, String name, String signature, String superName,
                String[] interfaces) {
            this.signature = signature;
        }

        @Override
        public void visitEnd() {
            assertEquals("<E:Ljava/lang/Object;>Ljava/lang/Object;", signature);
        }
    }, 0);
}

From source file:com.github.rkaippully.jasm.test.ClassAttributesTest.java

License:Apache License

@Test
public void testDeprecated() {
    reader.accept(new ClassVisitor(ASM4) {
        private boolean deprecated;

        @Override//w  w  w . j  a v  a 2  s  .  co m
        public void visit(int version, int access, String name, String signature, String superName,
                String[] interfaces) {
            if ((access & ACC_DEPRECATED) != 0)
                this.deprecated = true;
        }

        @Override
        public void visitEnd() {
            assertTrue(deprecated);
        }
    }, 0);
}

From source file:com.github.rkaippully.jasm.test.FieldsTest.java

License:Apache License

@Test
public void testAccessFlags() {
    ClassVisitor v = new ClassVisitor(ASM4) {
        private int access;

        @Override//from w w  w  .j a v a  2  s  .  co m
        public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) {
            this.access = access;
            return null;
        }

        @Override
        public void visitEnd() {
            assertEquals(ACC_PRIVATE, this.access);
        }
    };

    reader.accept(v, 0);
}

From source file:com.github.rkaippully.jasm.test.FieldsTest.java

License:Apache License

@Test
public void testFieldName() {
    ClassVisitor v = new ClassVisitor(ASM4) {
        private String name;

        @Override//from   w ww .jav a 2s .  co  m
        public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) {
            this.name = name;
            return null;
        }

        @Override
        public void visitEnd() {
            assertEquals("field1", this.name);
        }
    };

    reader.accept(v, 0);
}

From source file:com.github.rkaippully.jasm.test.FieldsTest.java

License:Apache License

@Test
public void testFieldDescriptor() {
    ClassVisitor v = new ClassVisitor(ASM4) {
        private String descriptor;

        @Override/*from www.  j a va 2s . co m*/
        public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) {
            this.descriptor = desc;
            return null;
        }

        @Override
        public void visitEnd() {
            assertEquals("[I", this.descriptor);
        }
    };

    reader.accept(v, 0);
}