Example usage for org.objectweb.asm FieldVisitor FieldVisitor

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

Introduction

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

Prototype

public FieldVisitor(final int api, final FieldVisitor fieldVisitor) 

Source Link

Document

Constructs a new FieldVisitor .

Usage

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;
}