Example usage for org.objectweb.asm MethodVisitor MethodVisitor

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

Introduction

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

Prototype

MethodVisitor

Source Link

Usage

From source file:org.codehaus.plexus.metadata.ann.AnnReader.java

License:Apache License

public MethodVisitor visitMethod(int access, final String mname, final String mdesc, String signature,
        String[] exceptions) {//from www .  ja v a2s  .c  o  m
    final AnnMethod method = new AnnMethod(annClass, access, mname, mdesc);
    annClass.addMethod(method);

    return new MethodVisitor() {

        public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
            Ann ann = new Ann(desc);
            method.addAnn(ann);
            return new AnnAnnReader(ann);
        }

        public AnnotationVisitor visitParameterAnnotation(int parameter, String desc, boolean visible) {
            Ann ann = new Ann(desc);
            method.addParamAnn(parameter, ann);
            return new AnnAnnReader(ann);
        }

        public AnnotationVisitor visitAnnotationDefault() {
            // TODO
            return null;
        }

        public void visitAttribute(Attribute attr) {
        }

        public void visitCode() {
        }

        public void visitFieldInsn(int opcode, String owner, String name, String desc) {
        }

        public void visitFrame(int type, int local, Object[] local2, int stack, Object[] stack2) {
        }

        public void visitIincInsn(int var, int increment) {
        }

        public void visitInsn(int opcode) {
        }

        public void visitIntInsn(int opcode, int operand) {
        }

        public void visitJumpInsn(int opcode, Label label) {
        }

        public void visitLabel(Label label) {
        }

        public void visitLdcInsn(Object cst) {
        }

        public void visitMethodInsn(int opcode, String owner, String name, String desc) {
        }

        public void visitMultiANewArrayInsn(String desc, int dims) {
        }

        public void visitLookupSwitchInsn(Label dflt, int[] keys, Label[] labels) {
        }

        public void visitTableSwitchInsn(int min, int max, Label dflt, Label[] labels) {
        }

        public void visitTypeInsn(int opcode, String type) {
        }

        public void visitVarInsn(int opcode, int var) {
        }

        public void visitMaxs(int maxStack, int maxLocals) {
        }

        public void visitLocalVariable(String name, String desc, String signature, Label start, Label end,
                int index) {
        }

        public void visitTryCatchBlock(Label start, Label end, Label handler, String type) {
        }

        public void visitLineNumber(int line, Label start) {
        }

        public void visitEnd() {
        }

    };
}

From source file:org.eclipse.ocl.examples.codegen.java.JavaAnnotationReader.java

License:Open Source License

/**
 * Return true for an @NonNull annotation, false for an @Nullable annotation, null otherwise.
 *//*www . j a v  a  2 s. co  m*/
public Boolean getIsNonNull(@NonNull Method method) {
    final String className = method.getDeclaringClass().getName();
    final String requiredDesc = className + ";" + method.getName() + Type.getMethodDescriptor(method);
    Boolean state = desc2state.get(requiredDesc);
    if (state != null) {
        return state;
    }
    if (!readClasses.add(className)) {
        return null;
    }
    //      System.out.println("getIsNonNull: " + requiredDesc);
    InputStream classStream = null;
    try {
        final int flags = ClassReader.SKIP_DEBUG | ClassReader.SKIP_FRAMES | ClassReader.SKIP_CODE;
        ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
        String classFileName = className.replace('.', '/') + ".class";
        classStream = contextClassLoader.getResourceAsStream(classFileName);
        final ClassReader cr = new ClassReader(classStream);
        ClassVisitor cv = new ClassVisitor() {
            @Override
            public MethodVisitor visitMethod(int access, String name, String desc, String signature,
                    String[] exceptions) {
                final String methodDesc = className + ";" + name + desc;
                //               System.out.println("  ClassVisitor.visitMethod: " + methodDesc);
                desc2state.put(methodDesc, null);
                return new MethodVisitor() {
                    @Override
                    public AnnotationVisitor visitAnnotation(String annotationDesc, boolean visible) {
                        //                     System.out.println("    MethodVisitor:" + annotationDesc + " " + true);
                        if (annotationDesc.equals(nonNullDesc)) {
                            desc2state.put(methodDesc, true);
                        } else if (annotationDesc.equals(nullableDesc)) {
                            desc2state.put(methodDesc, false);
                        }
                        return null;
                    }

                    @Override
                    public AnnotationVisitor visitAnnotationDefault() {
                        return null;
                    }

                    @Override
                    public AnnotationVisitor visitParameterAnnotation(int parameter, String desc,
                            boolean visible) {
                        return null;
                    }

                    @Override
                    public void visitAttribute(Attribute attr) {
                    }

                    @Override
                    public void visitCode() {
                    }

                    @Override
                    public void visitFrame(int type, int nLocal, Object[] local, int nStack, Object[] stack) {
                    }

                    @Override
                    public void visitInsn(int opcode) {
                    }

                    @Override
                    public void visitIntInsn(int opcode, int operand) {
                    }

                    @Override
                    public void visitVarInsn(int opcode, int var) {
                    }

                    @Override
                    public void visitTypeInsn(int opcode, String type) {
                    }

                    @Override
                    public void visitFieldInsn(int opcode, String owner, String name, String desc) {
                    }

                    @Override
                    public void visitMethodInsn(int opcode, String owner, String name, String desc) {
                    }

                    @Override
                    public void visitJumpInsn(int opcode, Label label) {
                    }

                    @Override
                    public void visitLabel(Label label) {
                    }

                    @Override
                    public void visitLdcInsn(Object cst) {
                    }

                    @Override
                    public void visitIincInsn(int var, int increment) {
                    }

                    @Override
                    public void visitTableSwitchInsn(int min, int max, Label dflt, Label[] labels) {
                    }

                    @Override
                    public void visitLookupSwitchInsn(Label dflt, int[] keys, Label[] labels) {
                    }

                    @Override
                    public void visitMultiANewArrayInsn(String desc, int dims) {
                    }

                    @Override
                    public void visitTryCatchBlock(Label start, Label end, Label handler, String type) {
                    }

                    @Override
                    public void visitLocalVariable(String name, String desc, String signature, Label start,
                            Label end, int index) {
                    }

                    @Override
                    public void visitLineNumber(int line, Label start) {
                    }

                    @Override
                    public void visitMaxs(int maxStack, int maxLocals) {
                    }

                    @Override
                    public void visitEnd() {
                    }
                };
            }

            @Override
            public void visit(int version, int access, String name, String signature, String superName,
                    String[] interfaces) {
            }

            @Override
            public void visitSource(String source, String debug) {
            }

            @Override
            public void visitOuterClass(String owner, String name, String desc) {
            }

            @Override
            public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
                return null;
            }

            @Override
            public void visitAttribute(Attribute attr) {
            }

            @Override
            public void visitInnerClass(String name, String outerName, String innerName, int access) {
            }

            @Override
            public FieldVisitor visitField(int access, String name, String desc, String signature,
                    Object value) {
                return null;
            }

            @Override
            public void visitEnd() {
            }
        };
        cr.accept(cv, flags);
    } catch (IOException e) {
        logger.error("Failed to read '" + className + "'", e);
    } finally {
        if (classStream != null) {
            try {
                classStream.close();
            } catch (IOException e) {
            }
        }
    }
    return desc2state.get(requiredDesc);
}