List of usage examples for org.objectweb.asm AnnotationVisitor AnnotationVisitor
public AnnotationVisitor(final int api)
From source file:bench.anno.Test.java
License:BSD License
static void printAnnotation(final List annotationList) { if (annotationList != null && !annotationList.isEmpty()) { AnnotationNode annoNode = null;/* w w w . j av a 2 s . c o m*/ for (final Object annotation : annotationList) { annoNode = (AnnotationNode) annotation; System.out.println("Annotation Descriptor : " + annoNode.desc); System.out.println("Annotation attribute pairs : " + annoNode.values); final AnnotationVisitor visitor = new AnnotationVisitor(0) { @Override public void visit(final String arg0, final Object arg1) { } @Override public AnnotationVisitor visitAnnotation(final String arg0, final String arg1) { return null; } @Override public AnnotationVisitor visitArray(final String arg0) { return null; } @Override public void visitEnd() { } @Override public void visitEnum(final String arg0, final String arg1, final String arg2) { } }; // annoNode.accept(visitor); } } else { System.out.println("No annotations found.."); } }
From source file:cn.annoreg.asm.InnerClassVisitor.java
License:Open Source License
@Override public AnnotationVisitor visitAnnotation(String desc, boolean visible) { if (desc.equals(Type.getDescriptor(SideOnly.class))) { //We need to know if it's client only. return new AnnotationVisitor(api) { @Override/*from w w w . j a v a2s.c o m*/ public void visitEnum(String name, String desc, String value) { if (value == Side.CLIENT.toString()) { InnerClassVisitor.this.clientOnly = true; } } }; } if (desc.equals(Type.getDescriptor(Registrant.class))) { isReg = true; } return null; }
From source file:co.paralleluniverse.fibers.instrument.SuspOffsetsAfterInstrClassVisitor.java
License:Open Source License
@Override public MethodVisitor visitMethod(final int access, final String name, final String desc, final String signature, final String[] exceptions) { if ((access & Opcodes.ACC_NATIVE) == 0 && !isYieldMethod(className, name)) { // Bytecode-level AST of a method, being a MethodVisitor itself can be filled through delegation from another visitor final MethodNode mn = new MethodNode(access, name, desc, signature, exceptions); // Analyze, fill and enqueue method ASTs final MethodVisitor outMV = super.visitMethod(access, name, desc, signature, exceptions); return new MethodVisitor(ASMAPI, outMV) { private Label currLabel = null; private int prevOffset = -1; private boolean instrumented; private boolean optimized = false; private int methodStart = -1, methodEnd = -1; private List<Integer> suspOffsetsAfterInstrL = new ArrayList<>(); private int[] suspCallSites = new int[0]; @Override/*w w w .j a va 2 s . co m*/ public AnnotationVisitor visitAnnotation(final String adesc, boolean visible) { if (Classes.INSTRUMENTED_DESC.equals(adesc)) { instrumented = true; return new AnnotationVisitor(ASMAPI) { // Only collect info @Override public void visit(String name, Object value) { if (Instrumented.FIELD_NAME_METHOD_START.equals(name)) methodStart = (Integer) value; else if (Instrumented.FIELD_NAME_METHOD_END.equals(name)) methodEnd = (Integer) value; else if (Instrumented.FIELD_NAME_METHOD_OPTIMIZED.equals(name)) optimized = (Boolean) value; else if (Instrumented.FIELD_NAME_SUSPENDABLE_CALL_SITES.equals(name)) suspCallSites = (int[]) value; else //noinspection StatementWithEmptyBody if (Instrumented.FIELD_NAME_SUSPENDABLE_CALL_SITES_OFFSETS_AFTER_INSTR.equals(name)) ; // Ignore, we're filling it else throw new RuntimeException("Unexpected `@Instrumented` field: " + name); } }; } return super.visitAnnotation(adesc, visible); } @Override public void visitLocalVariable(String name, String desc, String sig, Label lStart, Label lEnd, int slot) { super.visitLocalVariable(name, desc, sig, lStart, lEnd, slot); } @Override public void visitLabel(Label label) { if (instrumented) { currLabel = label; } super.visitLabel(label); } @Override public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean isInterface) { if (instrumented) { final int type = AbstractInsnNode.METHOD_INSN; if (InstrumentMethod.isSuspendableCall(db, type, opcode, owner, name, desc) && !Classes.STACK_NAME.equals(owner) && // postRestore currLabel != null && currLabel.info instanceof Integer) addLine(); } super.visitMethodInsn(opcode, owner, name, desc, isInterface); } @Override public void visitInvokeDynamicInsn(String name, String desc, Handle handle, Object... objects) { if (instrumented) { final int type = AbstractInsnNode.INVOKE_DYNAMIC_INSN; final int opcode = Opcodes.INVOKEDYNAMIC; if (InstrumentMethod.isSuspendableCall(db, type, opcode, handle.getOwner(), name, desc) && !Classes.STACK_NAME.equals(handle.getOwner()) && // postRestore currLabel != null && currLabel.info instanceof Integer) addLine(); } super.visitInvokeDynamicInsn(name, desc, handle, objects); } @Override public void visitEnd() { if (instrumented) InstrumentMethod.emitInstrumentedAnn(db, outMV, mn, sourceName, className, optimized, methodStart, methodEnd, suspCallSites, toIntArray(suspOffsetsAfterInstrL)); super.visitEnd(); } private void addLine() { final int currOffset = (Integer) currLabel.info; if (currOffset > prevOffset) { suspOffsetsAfterInstrL.add(currOffset); prevOffset = currOffset; } } }; } return super.visitMethod(access, name, desc, signature, exceptions); }
From source file:com.diffplug.gradle.autosgi.PluginMetadataGen.java
License:Apache License
/** Loads a class by its FQN. If it's concrete and implements a plugin, then we'll call generatePlugin. */ private void maybeGeneratePlugin(Path path) throws ClassNotFoundException, InstantiationException, IllegalAccessException, IOException { ClassReader reader = new ClassReader(Files.readAllBytes(path)); String plugClassName = asmToJava(reader.getClassName()); Box.Nullable<String> socketClassName = Box.Nullable.ofNull(); reader.accept(new ClassVisitor(Opcodes.ASM5) { @Override/* ww w. ja v a2s . c o m*/ public AnnotationVisitor visitAnnotation(String desc, boolean visible) { if (PLUG.equals(desc)) { return new AnnotationVisitor(Opcodes.ASM5) { @Override public void visit(String name, Object value) { Preconditions.checkArgument(name.equals("value"), "For @Plug %s, expected 'value' but was '%s'", plugClassName, name); Preconditions.checkArgument(socketClassName.get() == null, "For @Plug %s, multiple annotations: '%s' and '%s'", plugClassName, socketClassName.get(), value); socketClassName.set(((org.objectweb.asm.Type) value).getClassName()); } }; } else { return null; } } }, ClassReader.SKIP_FRAMES | ClassReader.SKIP_DEBUG | ClassReader.SKIP_CODE); if (socketClassName.get() == null) { return; } Class<?> plugClass = classLoader.loadClass(plugClassName); Class<?> socketClass = classLoader.loadClass(socketClassName.get()); if (Modifier.isAbstract(plugClass.getModifiers())) { throw new IllegalArgumentException( "Class " + plugClass + " has @Plug(" + socketClass + ") but it is abstract."); } String osgiInfContent = generatePlugin(plugClass, socketClass); osgiInf.put(plugClass.getName(), osgiInfContent); }
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); }/*w w w . j a v a 2 s . co m*/ @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.google.devtools.j2objc.util.PackageInfoLookup.java
License:Apache License
private PackageData parseDataFromClassFile(InputFile file) throws IOException { PackageDataBuilder builder = new PackageDataBuilder(); ClassReader classReader = new ClassReader(file.getInputStream()); classReader.accept(new ClassVisitor(Opcodes.ASM5) { @Override//from w w w .ja v a 2 s . co m public AnnotationVisitor visitAnnotation(String desc, boolean visible) { if (desc.equals("Lcom/google/j2objc/annotations/ObjectiveCName;")) { return new AnnotationVisitor(Opcodes.ASM5) { @Override public void visit(String name, Object value) { if (name.equals("value")) { builder.setObjectiveCName(value.toString()); } } }; } else if (desc.equals("Ljavax/annotation/ParametersAreNonnullByDefault;")) { builder.setParametersAreNonnullByDefault(); } else if (desc.equals("Lcom/google/j2objc/annotations/ReflectionSupport;")) { return new AnnotationVisitor(Opcodes.ASM5) { @Override public void visitEnum(String name, String desc, String value) { if (desc.equals("Lcom/google/j2objc/annotations/ReflectionSupport$Level;") && name.equals("value")) { builder.setReflectionSupportLevel(ReflectionSupport.Level.valueOf(value)); } } }; } return null; } }, 0); return builder.build(); }
From source file:com.google.devtools.j2objc.util.PackagePrefixes.java
License:Apache License
/** * Check if there is a package-info class with a prefix annotation. *///from www .ja v a 2s. c om private String getPrefixFromPackageInfoClass(String packageName) { final String[] result = new String[1]; try { InputFile file = FileUtil.findOnClassPath(packageName + ".package-info"); if (file != null) { ClassReader classReader = new ClassReader(file.getInputStream()); classReader.accept(new ClassVisitor(Opcodes.ASM5) { @Override public AnnotationVisitor visitAnnotation(String desc, boolean visible) { if (!desc.equals("Lcom/google/j2objc/annotations/ObjectiveCName;")) { return null; } return new AnnotationVisitor(Opcodes.ASM5) { @Override public void visit(String name, Object value) { if (name.equals("value")) { result[0] = value.toString(); } } }; } }, 0); } } catch (IOException e) { // Continue, as there's no package-info to check. } return result[0]; }
From source file:com.tonicsystems.jarjar.EmptyClassVisitor.java
License:Apache License
@Override public AnnotationVisitor visitAnnotation(String desc, boolean visible) { return new AnnotationVisitor(Opcodes.ASM4) { }; }
From source file:com.tonicsystems.jarjar.StringReader.java
License:Apache License
@Override public AnnotationVisitor visitAnnotation(String desc, boolean visible) { return new AnnotationVisitor(Opcodes.ASM4) { @Override/*from w ww .jav a 2 s .co m*/ public void visit(String name, Object value) { handleObject(value); } @Override public void visitEnum(String name, String desc, String value) { handleObject(value); } @Override public AnnotationVisitor visitAnnotation(String name, String desc) { return this; } }; }
From source file:com.tonicsystems.jarjar.strings.StringReader.java
License:Apache License
@Override public AnnotationVisitor visitAnnotation(String desc, boolean visible) { return new AnnotationVisitor(Opcodes.ASM5) { @Override/*from w ww . ja v a 2 s. co m*/ public void visit(String name, Object value) { handleObject(value); } @Override public void visitEnum(String name, String desc, String value) { handleObject(value); } @Override public AnnotationVisitor visitAnnotation(String name, String desc) { return this; } }; }