Search in sources :

Example 6 with Target

use of java.lang.annotation.Target in project epoxy by airbnb.

the class AttributeInfo method buildAnnotationLists.

/**
   * Keeps track of annotations on the attribute so that they can be used in the generated setter
   * and getter method. Setter and getter annotations are stored separately since the annotation may
   * not target both method and parameter types.
   */
private void buildAnnotationLists(List<? extends AnnotationMirror> annotationMirrors) {
    for (AnnotationMirror annotationMirror : annotationMirrors) {
        if (!annotationMirror.getElementValues().isEmpty()) {
            // Not supporting annotations with values for now
            continue;
        }
        ClassName annotationClass = ClassName.bestGuess(annotationMirror.getAnnotationType().toString());
        if (annotationClass.equals(ClassName.get(EpoxyAttribute.class))) {
            // Don't include our own annotation
            continue;
        }
        DeclaredType annotationType = annotationMirror.getAnnotationType();
        // A target may exist on an annotation type to specify where the annotation can
        // be used, for example fields, methods, or parameters.
        Target targetAnnotation = annotationType.asElement().getAnnotation(Target.class);
        // Allow all target types if no target was specified on the annotation
        List<ElementType> elementTypes = Arrays.asList(targetAnnotation == null ? ElementType.values() : targetAnnotation.value());
        AnnotationSpec annotationSpec = AnnotationSpec.builder(annotationClass).build();
        if (elementTypes.contains(ElementType.PARAMETER)) {
            setterAnnotations.add(annotationSpec);
        }
        if (elementTypes.contains(ElementType.METHOD)) {
            getterAnnotations.add(annotationSpec);
        }
    }
}
Also used : AnnotationMirror(javax.lang.model.element.AnnotationMirror) Target(java.lang.annotation.Target) ElementType(java.lang.annotation.ElementType) ClassName(com.squareup.javapoet.ClassName) AnnotationSpec(com.squareup.javapoet.AnnotationSpec) DeclaredType(javax.lang.model.type.DeclaredType)

Aggregations

Target (java.lang.annotation.Target)6 ElementType (java.lang.annotation.ElementType)4 AnnotationTree (com.sun.source.tree.AnnotationTree)2 Retention (java.lang.annotation.Retention)2 RetentionPolicy (java.lang.annotation.RetentionPolicy)2 InvocationTargetException (java.lang.reflect.InvocationTargetException)2 Method (java.lang.reflect.Method)2 ClassExpression (org.codehaus.groovy.ast.expr.ClassExpression)2 ConstantExpression (org.codehaus.groovy.ast.expr.ConstantExpression)2 Expression (org.codehaus.groovy.ast.expr.Expression)2 ListExpression (org.codehaus.groovy.ast.expr.ListExpression)2 PropertyExpression (org.codehaus.groovy.ast.expr.PropertyExpression)2 AnnotationSpec (com.squareup.javapoet.AnnotationSpec)1 ClassName (com.squareup.javapoet.ClassName)1 Nullable (javax.annotation.Nullable)1 AnnotationMirror (javax.lang.model.element.AnnotationMirror)1 DeclaredType (javax.lang.model.type.DeclaredType)1