Search in sources :

Example 1 with UtilityClass

use of com.newrelic.weave.UtilityClass in project newrelic-java-agent by newrelic.

the class AgentPreprocessors method markUtilityClasses.

/**
 * Visit classes and add a "@UtilityClass" annotation on anything that doesn't have "@Weave" or "@SkipIfPresent"
 */
ClassVisitor markUtilityClasses(ClassVisitor cv) {
    return new ClassVisitor(WeaveUtils.ASM_API_LEVEL, cv) {

        private boolean isUtilityClass = true;

        @Override
        public AnnotationVisitor visitAnnotation(String desc, boolean visible) {
            if (Type.getDescriptor(Weave.class).equals(desc) || Type.getDescriptor(SkipIfPresent.class).equals(desc) || Type.getDescriptor(WeaveWithAnnotation.class).equals(desc)) {
                this.isUtilityClass = false;
            }
            return super.visitAnnotation(desc, visible);
        }

        @Override
        public void visitEnd() {
            if (isUtilityClass) {
                addUtilityClassAnnotation(cv);
            }
            super.visitEnd();
        }

        private ClassVisitor addUtilityClassAnnotation(ClassVisitor cv) {
            AnnotationVisitor av = cv.visitAnnotation(Type.getDescriptor(UtilityClass.class), true);
            av.visit("weavePackageName", weavePackageName);
            av.visitEnd();
            return cv;
        }
    };
}
Also used : AnnotationVisitor(org.objectweb.asm.AnnotationVisitor) SkipIfPresent(com.newrelic.api.agent.weaver.SkipIfPresent) UtilityClass(com.newrelic.weave.UtilityClass) ClassVisitor(org.objectweb.asm.ClassVisitor) Weave(com.newrelic.api.agent.weaver.Weave)

Aggregations

SkipIfPresent (com.newrelic.api.agent.weaver.SkipIfPresent)1 Weave (com.newrelic.api.agent.weaver.Weave)1 UtilityClass (com.newrelic.weave.UtilityClass)1 AnnotationVisitor (org.objectweb.asm.AnnotationVisitor)1 ClassVisitor (org.objectweb.asm.ClassVisitor)1