Example usage for org.objectweb.asm AnnotationVisitor visitAnnotation

List of usage examples for org.objectweb.asm AnnotationVisitor visitAnnotation

Introduction

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

Prototype

public AnnotationVisitor visitAnnotation(final String name, final String descriptor) 

Source Link

Document

Visits a nested annotation value of the annotation.

Usage

From source file:ch.raffael.contracts.processor.pmap.ParameterMapAnnotationProcessor.java

License:Apache License

private void writeType(AnnotationVisitor annotation, TypeElement element, AnnotationVisitor innerClassArray) {
    AnnotationVisitor methodsArray = annotation.visitArray("methods");
    for (Element elem : element.getEnclosedElements()) {
        String methodName;/* ww  w.  j a  va2 s.com*/
        if (elem.getKind() == ElementKind.CONSTRUCTOR) {
            methodName = CTOR_NAME;
        } else if (elem.getKind() == ElementKind.METHOD) {
            methodName = elem.getSimpleName().toString();
        } else {
            continue;
        }
        AnnotationVisitor methodAnnotation = methodsArray.visitAnnotation(null,
                Type.getDescriptor(ParameterMap.Method.class));
        methodAnnotation.visit("descriptor", getMethodDescriptor((ExecutableElement) elem));
        AnnotationVisitor paramNames = methodAnnotation.visitArray("parameterNames");
        for (VariableElement param : ((ExecutableElement) elem).getParameters()) {
            paramNames.visit(null, param.getSimpleName().toString());
        }
        paramNames.visitEnd();
        methodAnnotation.visitEnd();
    }
    methodsArray.visitEnd();
    boolean endInnerClassArray = false;
    if (innerClassArray == null) {
        innerClassArray = annotation.visitArray("innerClasses");
        endInnerClassArray = true;
    }
    for (Element innerElem : element.getEnclosedElements()) {
        if (isType(innerElem)) {
            AnnotationVisitor innerClass = innerClassArray.visitAnnotation(null,
                    Type.getDescriptor(ParameterMap.InnerClass.class));
            innerClass.visit("name", toInternalName(
                    processingEnv.getElementUtils().getBinaryName((TypeElement) innerElem).toString()));
            writeType(innerClass, (TypeElement) innerElem, innerClassArray);
            innerClass.visitEnd();
        }
    }
    if (endInnerClassArray) {
        innerClassArray.visitEnd();
    }
}

From source file:com.android.build.gradle.internal.incremental.InstantRunVerifierTest.java

License:Apache License

@Test
public void testDiffListOnAnnotationNodesWithAnnotationArrayValue() throws Exception {
    AnnotationNode original = new AnnotationNode("Ltest/SomeAnnotation;");

    AnnotationVisitor arrayVisitor = original.visitArray("test");
    AnnotationVisitor newAnnotation = arrayVisitor.visitAnnotation("InnerAnnotation", "LTest;");
    newAnnotation.visit("innerEntry", "innerValue");
    newAnnotation.visitEnd();//from w w  w.j  ava2 s .  c  om

    newAnnotation = arrayVisitor.visitAnnotation("InnerAnnotation", "LTest;");
    newAnnotation.visit("innerEntry", "innerValue");
    newAnnotation.visitEnd();
    arrayVisitor.visitEnd();

    AnnotationNode updated = new AnnotationNode("Ltest/SomeAnnotation;");
    arrayVisitor = updated.visitArray("test");
    newAnnotation = arrayVisitor.visitAnnotation("InnerAnnotation", "LTest;");
    newAnnotation.visit("innerEntry", "innerValue");
    newAnnotation.visitEnd();

    newAnnotation = arrayVisitor.visitAnnotation("InnerAnnotation", "LTest;");
    newAnnotation.visit("innerEntry", "innerValue");
    newAnnotation.visitEnd();
    arrayVisitor.visitEnd();

    assertEquals(InstantRunVerifier.Diff.NONE, InstantRunVerifier.diffList(Lists.newArrayList(original),
            Lists.newArrayList(updated), InstantRunVerifier.ANNOTATION_COMPARATOR));
}

From source file:com.facebook.buck.java.abi.AnnotationMirror.java

License:Apache License

public void appendTo(AnnotationVisitor annotation, @Nullable String name) {
    AnnotationVisitor visitor = annotation.visitAnnotation(name, desc);
    visitValues(visitor);/*from w w w  .  j  av  a 2s.c o m*/
    visitor.visitEnd();
}

From source file:com.facebook.presto.byteCode.AnnotationDefinition.java

License:Apache License

private void visit(AnnotationVisitor visitor, String name, Object value) {
    if (value instanceof AnnotationDefinition) {
        AnnotationDefinition annotation = (AnnotationDefinition) value;
        AnnotationVisitor annotationVisitor = visitor.visitAnnotation(name, annotation.type.getType());
        annotation.visit(annotationVisitor);
    } else if (value instanceof Enum) {
        Enum<?> enumConstant = (Enum<?>) value;
        visitor.visitEnum(name, type(enumConstant.getDeclaringClass()).getClassName(), enumConstant.name());
    } else if (value instanceof ParameterizedType) {
        ParameterizedType parameterizedType = (ParameterizedType) value;
        visitor.visit(name, Type.getType(parameterizedType.getType()));
    } else if (value instanceof Class) {
        Class<?> clazz = (Class<?>) value;
        visitor.visit(name, Type.getType(clazz));
    } else if (value instanceof List) {
        AnnotationVisitor arrayVisitor = visitor.visitArray(name);
        for (Object element : (List<?>) value) {
            visit(arrayVisitor, null, element);
        }/*www.j  a  v a 2 s  . co m*/
        arrayVisitor.visitEnd();
    } else {
        visitor.visit(name, value);
    }
}

From source file:com.google.code.nanorm.internal.introspect.asm.MapperBuilder.java

License:Apache License

/**
 * Visit annotation property (String, primitive value, class reference or
 * other annotation)/*from   w ww.jav a  2  s  .  c o  m*/
 * @param name annotation name
 * @param obj value
 * @param visitor annotation visitar
 */
private static void visitAnnotationProperty(String name, Object obj, AnnotationVisitor visitor) {
    final Class<?> objClass = obj.getClass();
    if (objClass.isArray()) {
        // Array
        final AnnotationVisitor arrayVisitor = visitor.visitArray(name);
        for (Object o : (Object[]) obj) {
            visitAnnotationProperty(name, o, arrayVisitor);
        }
        arrayVisitor.visitEnd();
    } else if (objClass.isEnum()) {
        // Enumeration
        visitor.visitEnum(name, Type.getDescriptor(obj.getClass()), obj.toString());
    } else if (Annotation.class.isAssignableFrom(obj.getClass())) {
        // Nested annotation
        Annotation nested = (Annotation) obj;
        AnnotationVisitor nestedVisitor = visitor.visitAnnotation(name,
                Type.getDescriptor(nested.annotationType()));
        visitAnnotation(nestedVisitor, nested);
    } else if (obj instanceof Class<?>) {
        // Class reference
        visitor.visit(name, Type.getDescriptor((Class<?>) obj));
    } else {
        // String or primitive type
        visitor.visit(name, obj);
    }
}

From source file:com.google.template.soy.jbcsrc.AnnotationRef.java

License:Apache License

/** Writes an annotation valued field to the writer. */
private static <T extends Annotation> FieldWriter annotationFieldWriter(final String name,
        final AnnotationRef<T> ref) {
    return new FieldWriter() {
        @Override// w  w  w  .  java2s .  c  o m
        public void write(AnnotationVisitor visitor, Object value) {
            ref.doWrite(ref.annType.cast(value), visitor.visitAnnotation(name, ref.typeDescriptor));
        }
    };
}

From source file:com.google.template.soy.jbcsrc.restricted.AnnotationRef.java

License:Apache License

/** Writes an annotation array valued field to the annotation visitor. */
private static <T extends Annotation> FieldWriter annotationArrayFieldWriter(final String name,
        final AnnotationRef<T> ref) {
    return new FieldWriter() {
        @Override/*  w w  w  .  j a  va 2s .  c o m*/
        public void write(AnnotationVisitor visitor, Object value) {
            int len = Array.getLength(value);
            AnnotationVisitor arrayVisitor = visitor.visitArray(name);
            for (int i = 0; i < len; i++) {
                ref.doWrite(ref.annType.cast(Array.get(value, i)),
                        arrayVisitor.visitAnnotation(null, ref.typeDescriptor));
            }
            arrayVisitor.visitEnd();
        }
    };
}

From source file:com.googlecode.ddom.weaver.asm.AnnotationVisitorTee.java

License:Apache License

public AnnotationVisitor visitAnnotation(String name, String desc) {
    AnnotationVisitor result = null;/*from www.j a v a  2 s.com*/
    for (AnnotationVisitor visitor : visitors) {
        result = mergeVisitors(result, visitor.visitAnnotation(name, desc));
    }
    return result;
}

From source file:com.googlecode.dex2jar.v3.AnnotationNode.java

License:Apache License

@SuppressWarnings("unchecked")
public static void accept(String name, Object v, AnnotationVisitor av) {
    if (v instanceof AnnotationNode) {
        AnnotationNode a = (AnnotationNode) v;
        AnnotationVisitor av1 = av.visitAnnotation(name, a.type);
        accept(a.items, av1);/*w  ww.j  a va  2s.  c o  m*/
        av1.visitEnd();
    } else if (v instanceof Field) {
        Field e = (Field) v;
        av.visitEnum(name, e.getOwner(), e.getName());
    } else if (v instanceof List) {
        List<Object> list = (List<Object>) v;
        AnnotationVisitor av1 = av.visitArray(name);
        for (Object i : list) {
            accept(null, i, av1);
        }
        av1.visitEnd();
    } else if (v instanceof Method) {
        // Method method = (Method) v;
        // AnnotationVisitor av1 = av.visitAnnotation(item.name, "Lcom.googlecode.Method;");
        // av1.visit("owner", method.getOwner());
        // av1.visit("name", method.getName());
        // av1.visit("desc", method.getType().getDesc());
        // av1.visitEnd();
        av.visit(name, v);
    } else if (v instanceof DexType) {
        av.visit(name, ((DexType) v).desc);
    } else {
        av.visit(name, v);
    }
}

From source file:com.googlecode.dex2jar.v3.V3AnnAdapter.java

License:Apache License

public static void accept(List<Item> items, AnnotationVisitor av) {
    if (av == null) {
        return;/*from   w  w  w.  jav a 2s  . c  o  m*/
    }
    for (Item item : items) {
        Object v = item.value;
        if (v instanceof Annotation) {
            Annotation a = (Annotation) v;
            if (a.type != null) {
                AnnotationVisitor av1 = av.visitAnnotation(item.name, a.type);
                accept(a.items, av1);
                av1.visitEnd();
            } else {// array
                AnnotationVisitor av1 = av.visitArray(item.name);
                accept(a.items, av1);
                av1.visitEnd();
            }
        } else if (v instanceof Field) {
            Field e = (Field) v;
            av.visitEnum(item.name, e.getType(), e.getName());
        } else if (v instanceof Method) {
            // Method method = (Method) v;
            // AnnotationVisitor av1 = av.visitAnnotation(item.name, "Lcom.googlecode.Method;");
            // av1.visit("owner", method.getOwner());
            // av1.visit("name", method.getName());
            // av1.visit("desc", method.getType().getDesc());
            // av1.visitEnd();
            av.visit(item.name, v);
        } else {
            av.visit(item.name, v);
        }
    }
}