List of usage examples for org.objectweb.asm MethodVisitor MethodVisitor
MethodVisitor
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); }