List of usage examples for org.objectweb.asm FieldVisitor FieldVisitor
public FieldVisitor(final int api, final FieldVisitor fieldVisitor)
From source file:com.android.build.gradle.shrinker.ClassStructureVisitor.java
License:Apache License
@Override public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) { final T field = mGraph.addMember(mClass, name, desc, access); FieldVisitor superVisitor = super.visitField(access, name, desc, signature, value); return new FieldVisitor(Opcodes.ASM5, superVisitor) { @Override/* w w w. j av a 2 s . c o m*/ public AnnotationVisitor visitAnnotation(String desc, boolean visible) { mGraph.addAnnotation(field, Type.getType(desc).getInternalName()); return super.visitAnnotation(desc, visible); } }; }
From source file:com.android.build.gradle.shrinker.IncrementalRunVisitor.java
License:Apache License
@Override public FieldVisitor visitField(int access, final String name, String desc, String signature, Object value) { T field = mGraph.getMemberReference(mClassName, name, desc); if (!mFields.remove(field)) { throw new IncrementalShrinker.IncrementalRunImpossibleException( String.format("Field %s.%s:%s added.", mClassName, name, desc)); }/*from w w w . j av a2s . c om*/ if (mGraph.getModifiers(field) != access) { throw new IncrementalShrinker.IncrementalRunImpossibleException( String.format("Field %s.%s:%s modifiers changed.", mClassName, name, desc)); } final Set<String> memberAnnotations = Sets.newHashSet(mGraph.getAnnotations(field)); FieldVisitor superVisitor = super.visitField(access, name, desc, signature, value); return new FieldVisitor(Opcodes.ASM5, superVisitor) { @Override public AnnotationVisitor visitAnnotation(String desc, boolean visible) { checkForAddedAnnotation(desc, memberAnnotations, mClassName + "." + name); return super.visitAnnotation(desc, visible); } @Override public void visitEnd() { checkForRemovedAnnotation(memberAnnotations, mClassName + "." + name); super.visitEnd(); } }; }
From source file:com.android.builder.shrinker.ClassStructureVisitor.java
License:Apache License
@Override public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) { final T field = mGraph.addMember(mClass, name, desc, access); FieldVisitor superVisitor = super.visitField(access, name, desc, signature, value); return new FieldVisitor(Opcodes.ASM5, superVisitor) { @Override//from www. j a v a2s .com public AnnotationVisitor visitAnnotation(String desc, boolean visible) { mGraph.addAnnotation(field, desc); return super.visitAnnotation(desc, visible); } }; }
From source file:com.gargoylesoftware.js.nashorn.internal.tools.nasgen.ScriptClassInfoCollector.java
License:Open Source License
@Override public FieldVisitor visitField(final int fieldAccess, final String fieldName, final String fieldDesc, final String signature, final Object value) { final FieldVisitor delegateFV = super.visitField(fieldAccess, fieldName, fieldDesc, signature, value); return new FieldVisitor(Main.ASM_VERSION, delegateFV) { @Override//from w ww . j av a2 s . com public AnnotationVisitor visitAnnotation(final String descriptor, final boolean visible) { final AnnotationVisitor delegateAV = super.visitAnnotation(descriptor, visible); if (ScriptClassInfo.PROPERTY_ANNO_DESC.equals(descriptor)) { final MemberInfo memInfo = new MemberInfo(); memInfo.setKind(Kind.PROPERTY); memInfo.setJavaName(fieldName); memInfo.setJavaDesc(fieldDesc); memInfo.setJavaAccess(fieldAccess); if ((fieldAccess & Opcodes.ACC_STATIC) != 0) { memInfo.setValue(value); } addScriptMember(memInfo); return new AnnotationVisitor(Main.ASM_VERSION, delegateAV) { // These could be "null" if values are not supplied, // in which case we have to use the default values. private String name; private Integer attributes; private String clazz = ""; private Where where; @Override public void visit(final String annotationName, final Object annotationValue) { switch (annotationName) { case "name": this.name = (String) annotationValue; break; case "attributes": this.attributes = (Integer) annotationValue; break; case "clazz": this.clazz = (annotationValue == null) ? "" : annotationValue.toString(); break; default: break; } super.visit(annotationName, annotationValue); } @Override public void visitEnum(final String enumName, final String desc, final String enumValue) { if ("where".equals(enumName) && WHERE_ENUM_DESC.equals(desc)) { this.where = Where.valueOf(enumValue); } super.visitEnum(enumName, desc, enumValue); } @Override public void visitEnd() { super.visitEnd(); memInfo.setName(name == null ? fieldName : name); memInfo.setAttributes(attributes == null ? MemberInfo.DEFAULT_ATTRIBUTES : attributes); clazz = clazz.replace('.', '/'); memInfo.setInitClass(clazz); memInfo.setWhere(where == null ? Where.INSTANCE : where); } }; } return delegateAV; } }; }
From source file:com.gargoylesoftware.js.nashorn.internal.tools.nasgen.ScriptClassInstrumentor.java
License:Open Source License
@Override public FieldVisitor visitField(final int fieldAccess, final String fieldName, final String fieldDesc, final String signature, final Object value) { final MemberInfo memInfo = scriptClassInfo.find(fieldName, fieldDesc, fieldAccess); if (memInfo != null && memInfo.getKind() == Kind.PROPERTY && memInfo.getWhere() != Where.INSTANCE && !memInfo.isStaticFinal()) { // non-instance @Property fields - these have to go elsewhere unless 'static final' return null; }/*from w ww . ja v a 2s . co m*/ final FieldVisitor delegateFV = super.visitField(fieldAccess, fieldName, fieldDesc, signature, value); return new FieldVisitor(Main.ASM_VERSION, delegateFV) { @Override public AnnotationVisitor visitAnnotation(final String desc, final boolean visible) { if (ScriptClassInfo.annotations.containsKey(desc)) { // ignore script field annotations return null; } return fv.visitAnnotation(desc, visible); } @Override public void visitAttribute(final Attribute attr) { fv.visitAttribute(attr); } @Override public void visitEnd() { fv.visitEnd(); } }; }
From source file:com.github.bmsantos.core.cola.injector.InfoClassVisitor.java
License:Apache License
@Override public FieldVisitor visitField(final int access, final String name, final String desc, final String signature, final Object value) { fieldName = name;/*from w w w. ja va2 s . c o m*/ fieldValue = value; if (name.equals(DEFAULT_FIELD_NAME)) { features.add(parseFeature(DEFAULT_FIELD_NAME, value)); } final FieldVisitor fv = super.visitField(access, name, desc, signature, value); return new FieldVisitor(ASM4, fv) { @Override public AnnotationVisitor visitAnnotation(final String descriptor, final boolean runtimeVisible) { if (descriptor.equals(FEATURE_DESCRIPTOR)) { features.add(parseFeature(fieldName, fieldValue)); } else if (descriptor.equals(COLA_INJECTOR_DESCRIPTOR)) { colaInjectorFields.add(fieldName); } return super.visitAnnotation(descriptor, runtimeVisible); } }; }
From source file:com.github.projectsandstone.asmmeta.asm.ASMMetaClassVisitor.java
License:Open Source License
@Override public FieldVisitor visitField(int access, String name, String desc, String signature, Object value) { FieldElement fieldElement = new FieldElement(this.current, access, name, desc, new MetaData(), this.resolvers.getFieldResolver()); this.addToEnclosing(fieldElement); return new FieldVisitor(Opcodes.ASM5, super.visitField(access, name, desc, signature, value)) { @Override//w ww . j av a2s .c o m public AnnotationVisitor visitAnnotation(String desc, boolean visible) { AnnotationElement annotationElement = createAnnotationElement(fieldElement, desc); fieldElement.getMetaData().getAnnotationList().add(annotationElement); return new ASMMetaAnnotationVisitor(this.api, super.visitAnnotation(desc, visible), annotationElement, annotationElement.getValues()); } @Override public void visitEnd() { fieldElement.immutate(); super.visitEnd(); } }; }
From source file:org.apache.batchee.tools.maven.doc.ComponentDocumentationGenerator.java
License:Apache License
private String component(final Map<String, ClassDoc> commands, final File classFile) throws IOException { InputStream stream = null;//w w w. j av a2 s . co m try { stream = new FileInputStream(classFile); final ClassReader reader = new ClassReader(stream); reader.accept(new ClassVisitor(ASM5) { public boolean isLeaf; private String parentName; private String configName; private String className; private String doc; private List<FieldDoc> configs; @Override public void visit(final int version, final int access, final String name, final String signature, final String superName, final String[] interfaces) { parentName = superName == null || OBJECT_NAME.equals(superName) ? null : superName.replace('/', '.'); className = name.replace('/', '.'); isLeaf = !Modifier.isAbstract(access); // TODO: interfaces? } @Override public AnnotationVisitor visitAnnotation(final String desc, final boolean visible) { final AnnotationVisitor annotationVisitor = super.visitAnnotation(desc, visible); if (NAMED_MARKER.equals(desc)) { configName = className; final int dollar = configName.lastIndexOf('$'); if (dollar > 0) { configName = configName.substring(dollar + 1); } else { final int dot = configName.lastIndexOf('.'); if (dot > 0) { configName = configName.substring(dot + 1); } } configName = Introspector.decapitalize(configName); return new AnnotationVisitor(ASM5, annotationVisitor) { @Override public void visit(final String name, final Object value) { super.visit(name, value); if ("value".equals(name) && String.class.isInstance(value) && !String.class.cast(value).isEmpty()) { configName = value.toString(); } } }; } if (CONFIGURATION_MARKER.equals(desc)) { return new AnnotationVisitor(ASM5, annotationVisitor) { @Override public void visit(final String name, final Object value) { super.visit(name, value); if ("value".equals(name) && String.class.isInstance(value) && !String.class.cast(value).isEmpty()) { doc = value.toString(); } } }; } return annotationVisitor; } @Override public FieldVisitor visitField(final int access, final String name, final String desc, final String signature, final Object value) { return new FieldVisitor(ASM5, super.visitField(access, name, desc, signature, value)) { private boolean marked = false; private boolean hasInject = false; private String configName = name; private String doc = null; @Override public AnnotationVisitor visitAnnotation(final String desc, final boolean visible) { final AnnotationVisitor annotationVisitor = super.visitAnnotation(desc, visible); if (PROPERTY_MARKER.equals(desc)) { marked = true; return new AnnotationVisitor(ASM5, annotationVisitor) { @Override public void visit(final String name, final Object value) { super.visit(name, value); if ("name".equals(name) && String.class.isInstance(value) && !String.class.cast(value).isEmpty()) { configName = value.toString(); } } }; } if (INJECT_MARKER.equals(desc)) { hasInject = true; return annotationVisitor; } if (CONFIGURATION_MARKER.equals(desc)) { return new AnnotationVisitor(ASM5, annotationVisitor) { @Override public void visit(final String name, final Object value) { super.visit(name, value); if ("value".equals(name) && String.class.isInstance(value) && !String.class.cast(value).isEmpty()) { doc = value.toString(); } } }; } return annotationVisitor; } @Override public void visitEnd() { super.visitEnd(); if (marked && hasInject) { if (configs == null) { configs = new ArrayList<FieldDoc>(); } configs.add(new FieldDoc(configName, doc)); } } }; } @Override public void visitEnd() { super.visitEnd(); if (configs != null) { Collections.sort(configs); commands.put(className, new ClassDoc(isLeaf, parentName, configName == null ? className : configName, doc, configs)); } } }, SKIP_CODE + SKIP_DEBUG + SKIP_FRAMES); } finally { try { if (stream != null) { stream.close(); } } catch (final IOException e) { // no-op } } return null; }
From source file:org.javaweb.utils.ASMClassUtils.java
License:Apache License
/** * ASM??,??????class//from w w w . j a v a 2 s . c o m * * @param classFileBuffer ? * @return */ public Map<String, List<AnnotationNode>> getClassAnnotation(byte[] classFileBuffer) { final Map<String, List<AnnotationNode>> annotationNodeMap = new LinkedHashMap<String, List<AnnotationNode>>(); final List<AnnotationNode> classAnnotationNodeList = new ArrayList<AnnotationNode>(); final List<AnnotationNode> methodAnnotationNodeList = new ArrayList<AnnotationNode>(); final List<AnnotationNode> fieldAnnotationNodeList = new ArrayList<AnnotationNode>(); final ClassReader cr = new ClassReader(classFileBuffer); if (!ClassUtils.isInterface(cr)) { ClassWriter cw = new ClassWriter(cr, ClassWriter.COMPUTE_MAXS); cr.accept(new ClassVisitor(Opcodes.ASM5, cw) { @Override public AnnotationVisitor visitAnnotation(String desc, boolean visible) { AnnotationNode an = new AnnotationNode(desc); classAnnotationNodeList.add(an); return an; } @Override public MethodVisitor visitMethod(int access, String methodName, String argTypeDesc, String signature, String[] exceptions) { final MethodVisitor mv = super.visitMethod(access, methodName, argTypeDesc, signature, exceptions); return new MethodVisitor(Opcodes.ASM5, mv) { @Override public AnnotationVisitor visitAnnotation(String desc, boolean visible) { AnnotationNode an = new AnnotationNode(desc); methodAnnotationNodeList.add(an); return an; } }; } @Override public FieldVisitor visitField(int access, String methodName, String argTypeDesc, String signature, final Object value) { final FieldVisitor fv = super.visitField(access, methodName, argTypeDesc, signature, value); return new FieldVisitor(Opcodes.ASM5, fv) { @Override public AnnotationVisitor visitAnnotation(String desc, boolean visible) { AnnotationNode an = new AnnotationNode(desc); fieldAnnotationNodeList.add(an); return an; } }; } }, ClassReader.EXPAND_FRAMES); } annotationNodeMap.put("class", classAnnotationNodeList); annotationNodeMap.put("method", methodAnnotationNodeList); annotationNodeMap.put("field", fieldAnnotationNodeList); return annotationNodeMap; }