T
- The element typeA
- The annotation typepublic abstract class AbstractAnnotationMetadataBuilder<T,A> extends Object
AnnotationMetadata
.Modifier | Constructor and Description |
---|---|
protected |
AbstractAnnotationMetadataBuilder()
Default constructor.
|
Modifier and Type | Method and Description |
---|---|
protected abstract void |
addError(T originatingElement,
String error)
Adds an error.
|
static void |
addMutatedMetadata(String declaringType,
Object element,
AnnotationMetadata metadata)
Used to store metadata mutations at compilation time.
|
protected abstract void |
addWarning(T originatingElement,
String warning)
Adds an warning.
|
<A2 extends Annotation> |
annotate(AnnotationMetadata annotationMetadata,
AnnotationValue<A2> annotationValue)
Annotate an existing annotation metadata object.
|
AnnotationMetadata |
build(String declaringType,
T element)
Build the meta data for the given element.
|
AnnotationMetadata |
build(T element)
Build the meta data for the given element.
|
AnnotationMetadata |
buildDeclared(T element)
Build only metadata for declared annotations.
|
AnnotationMetadata |
buildDeclared(T element,
List<? extends A> annotations,
boolean includeTypeAnnotations)
Build only metadata for declared annotations.
|
AnnotationMetadata |
buildForMethod(T element)
Build the meta data for the given method element excluding any class metadata.
|
AnnotationMetadata |
buildForParent(String declaringType,
T parent,
T element)
Build the meta data for the given parent and method element excluding any class metadata.
|
AnnotationMetadata |
buildForParent(T parent,
T element)
Get the annotation metadata for the given element and the given parent.
|
AnnotationMetadata |
buildForParent(T parent,
T element,
boolean inheritTypeAnnotations)
Build the meta data for the given method element excluding any class metadata.
|
AnnotationMetadata |
buildForParents(List<T> parents,
T element)
Get the annotation metadata for the given element and the given parents.
|
AnnotationMetadata |
buildForParents(String declaringType,
List<T> parents,
T element)
Build the meta data for the given parents and method element excluding any class metadata.
|
protected abstract List<T> |
buildHierarchy(T element,
boolean inheritTypeAnnotations,
boolean declaredOnly)
Build the type hierarchy for the given element.
|
AnnotationMetadata |
buildOverridden(T element)
Build metadata for the given element, including any metadata that is inherited via method or type overrides.
|
static void |
clearCaches()
Used to clear caches at the end of a compilation cycle.
|
static void |
clearMutated()
Used to clear mutated metadata at the end of a compilation cycle.
|
static void |
copyToRuntime()
This is used for testing scenarios only where annotation metadata
is created without bean creation.
|
protected abstract VisitorContext |
createVisitorContext()
Creates the visitor context for this implementation.
|
protected List<AnnotationMapper<? extends Annotation>> |
getAnnotationMappers(String annotationName)
Obtain the annotation mappers for the given annotation name.
|
protected abstract T |
getAnnotationMember(T originatingElement,
CharSequence member)
Get the annotation member.
|
protected abstract String |
getAnnotationMemberName(T member)
Read the name of an annotation member.
|
protected abstract Map<String,? extends T> |
getAnnotationMembers(String annotationType)
Gets the annotation members for the given type.
|
protected abstract Optional<T> |
getAnnotationMirror(String annotationName)
Return a mirror for the given annotation.
|
protected abstract List<? extends A> |
getAnnotationsForType(T element)
Obtain the annotations for the given type.
|
protected List<AnnotationTransformer<Annotation>> |
getAnnotationTransformers(String annotationName)
Obtain the transformers mappers for the given annotation name.
|
protected abstract String |
getAnnotationTypeName(A annotationMirror)
Get the given type of the annotation.
|
protected abstract OptionalValues<?> |
getAnnotationValues(T originatingElement,
T member,
Class<?> annotationType)
Resolve the annotations values from the given member for the given type.
|
protected abstract String |
getDeclaringType(T element)
Obtains the declaring type for an element.
|
protected abstract String |
getElementName(T element)
Get the name for the given element.
|
protected AnnotatedElementValidator |
getElementValidator()
Obtains the element validator.
|
static Set<String> |
getMappedAnnotationNames() |
static Set<String> |
getMappedAnnotationPackages() |
protected abstract String |
getRepeatableName(A annotationMirror)
Obtain the name of the repeatable annotation if the annotation is is one.
|
protected abstract String |
getRepeatableNameForType(T annotationType)
Obtain the name of the repeatable annotation if the annotation is is one.
|
protected abstract RetentionPolicy |
getRetentionPolicy(T annotation)
Gets the retention policy for the given annotation.
|
protected abstract T |
getTypeForAnnotation(A annotationMirror)
Get the type of the given annotation.
|
protected abstract boolean |
hasAnnotation(T element,
Class<? extends Annotation> annotation)
Checks whether an annotation is present.
|
protected abstract boolean |
hasAnnotation(T element,
String annotation)
Checks whether an annotation is present.
|
protected abstract boolean |
hasAnnotations(T element)
Checks whether any annotations are present on the given element.
|
protected abstract boolean |
hasSimpleAnnotation(T element,
String simpleName)
Returns true if a simple meta annotation is present for the given element and annotation type.
|
static boolean |
isAnnotationMapped(String annotationName)
Returns whether the given annotation is a mapped annotation.
|
protected boolean |
isExcludedAnnotation(T element,
String annotationName)
Is the given annotation excluded for the specified element.
|
protected abstract boolean |
isInheritedAnnotation(A annotationMirror)
Test whether the annotation mirror is inherited.
|
protected abstract boolean |
isInheritedAnnotationType(T annotationType)
Test whether the annotation mirror is inherited.
|
static boolean |
isMetadataMutated(String declaringType,
Object element)
Used to store metadata mutations at compilation time.
|
protected abstract boolean |
isMethodOrClassElement(T element)
Whether the element is a field, method, class or constructor.
|
protected abstract boolean |
isValidationRequired(T member)
Return whether the given member requires validation.
|
protected Map<CharSequence,Object> |
populateAnnotationData(T originatingElement,
boolean originatingElementIsSameParent,
A annotationMirror,
DefaultAnnotationMetadata metadata,
boolean isDeclared,
RetentionPolicy retentionPolicy,
boolean allowAliases)
Populate the annotation data for the given annotation.
|
protected Map<CharSequence,Object> |
populateAnnotationData(T originatingElement,
T parent,
A annotationMirror,
DefaultAnnotationMetadata metadata,
boolean isDeclared,
RetentionPolicy retentionPolicy,
boolean allowAliases)
Populate the annotation data for the given annotation.
|
protected abstract Map<? extends T,?> |
readAnnotationDefaultValues(A annotationMirror)
Read the raw default annotation values from the given annotation.
|
protected abstract Map<? extends T,?> |
readAnnotationDefaultValues(String annotationName,
T annotationType)
Read the raw default annotation values from the given annotation.
|
protected abstract Map<? extends T,?> |
readAnnotationRawValues(A annotationMirror)
Read the raw annotation values from the given annotation.
|
protected abstract void |
readAnnotationRawValues(T originatingElement,
String annotationName,
T member,
String memberName,
Object annotationValue,
Map<CharSequence,Object> annotationValues)
Read the given member and value, applying conversions if necessary, and place the data in the given map.
|
protected abstract Object |
readAnnotationValue(T originatingElement,
T member,
String memberName,
Object annotationValue)
Read the given member and value, applying conversions if necessary, and place the data in the given map.
|
protected AnnotationValue |
readNestedAnnotationValue(T originatingElement,
A annotationMirror) |
AnnotationMetadata |
removeAnnotation(AnnotationMetadata annotationMetadata,
String annotationType)
Removes an annotation from the given annotation metadata.
|
<T1 extends Annotation> |
removeAnnotationIf(AnnotationMetadata annotationMetadata,
Predicate<AnnotationValue<T1>> predicate)
Removes an annotation from the metadata for the given predicate.
|
AnnotationMetadata |
removeStereotype(AnnotationMetadata annotationMetadata,
String annotationType)
Removes an annotation from the given annotation metadata.
|
protected void |
validateAnnotationValue(T originatingElement,
String annotationName,
T member,
String memberName,
Object resolvedValue)
Validates an annotation value.
|
protected AbstractAnnotationMetadataBuilder()
public AnnotationMetadata buildDeclared(T element)
element
- The elementAnnotationMetadata
public AnnotationMetadata buildDeclared(T element, List<? extends A> annotations, boolean includeTypeAnnotations)
element
- The elementannotations
- The annotationsincludeTypeAnnotations
- Whether to include type level annotations in the metadata for the elementAnnotationMetadata
public AnnotationMetadata buildOverridden(T element)
element
- The elementAnnotationMetadata
public AnnotationMetadata build(T element)
element
- The elementAnnotationMetadata
public AnnotationMetadata build(String declaringType, T element)
declaringType
- The declaring typeelement
- The elementAnnotationMetadata
protected abstract boolean isMethodOrClassElement(T element)
element
- The element@Nullable protected abstract String getDeclaringType(@NonNull T element)
element
- The elementpublic AnnotationMetadata buildForMethod(T element)
element
- The elementAnnotationMetadata
public AnnotationMetadata buildForParent(T parent, T element)
parent
- The parent elementelement
- The elementAnnotationMetadata
public AnnotationMetadata buildForParents(List<T> parents, T element)
parents
- The parent elementselement
- The elementAnnotationMetadata
public AnnotationMetadata buildForParent(String declaringType, T parent, T element)
declaringType
- The declaring typeparent
- The parent elementelement
- The elementAnnotationMetadata
public AnnotationMetadata buildForParents(String declaringType, List<T> parents, T element)
declaringType
- The declaring typeparents
- The parent elementselement
- The elementAnnotationMetadata
public AnnotationMetadata buildForParent(T parent, T element, boolean inheritTypeAnnotations)
parent
- The parent elementelement
- The elementinheritTypeAnnotations
- Whether to inherit annotations from type as stereotypesAnnotationMetadata
protected abstract T getTypeForAnnotation(A annotationMirror)
annotationMirror
- The annotationprotected abstract boolean hasAnnotation(T element, Class<? extends Annotation> annotation)
element
- The elementannotation
- The annotation typeprotected abstract boolean hasAnnotation(T element, String annotation)
element
- The elementannotation
- The annotation type nameprotected abstract boolean hasAnnotations(T element)
element
- The elementprotected abstract String getAnnotationTypeName(A annotationMirror)
annotationMirror
- The annotationprotected abstract String getElementName(T element)
element
- The elementprotected abstract List<? extends A> getAnnotationsForType(T element)
@Parent(value = {@Child, @Child})
should result in the two
child annotations being returned from this method instead of the
parent annotation.element
- The type elementprotected abstract List<T> buildHierarchy(T element, boolean inheritTypeAnnotations, boolean declaredOnly)
element
- The elementinheritTypeAnnotations
- Whether to inherit type annotationsdeclaredOnly
- Whether to only include declared annotationsprotected abstract void readAnnotationRawValues(T originatingElement, String annotationName, T member, String memberName, Object annotationValue, Map<CharSequence,Object> annotationValues)
originatingElement
- The originating elementannotationName
- The annotation namemember
- The member being read frommemberName
- The memberannotationValue
- The valueannotationValues
- The values to populateprotected void validateAnnotationValue(T originatingElement, String annotationName, T member, String memberName, Object resolvedValue)
originatingElement
- The originating elementannotationName
- The annotation namemember
- The membermemberName
- The member nameresolvedValue
- The resolved valueprotected abstract boolean isValidationRequired(T member)
member
- The member@Nullable protected AnnotatedElementValidator getElementValidator()
protected abstract void addError(@NonNull T originatingElement, @NonNull String error)
originatingElement
- The originating elementerror
- The errorprotected abstract void addWarning(@NonNull T originatingElement, @NonNull String warning)
originatingElement
- The originating elementwarning
- The warningprotected abstract Object readAnnotationValue(T originatingElement, T member, String memberName, Object annotationValue)
originatingElement
- The originating elementmember
- The membermemberName
- The member nameannotationValue
- The valueprotected abstract Map<? extends T,?> readAnnotationDefaultValues(A annotationMirror)
annotationMirror
- The annotationprotected abstract Map<? extends T,?> readAnnotationDefaultValues(String annotationName, T annotationType)
annotationName
- annotation nameannotationType
- the typeprotected abstract Map<? extends T,?> readAnnotationRawValues(A annotationMirror)
annotationMirror
- The annotationprotected abstract OptionalValues<?> getAnnotationValues(T originatingElement, T member, Class<?> annotationType)
originatingElement
- The originating elementmember
- The memberannotationType
- The typeprotected abstract String getAnnotationMemberName(T member)
member
- The member@Nullable protected abstract String getRepeatableName(A annotationMirror)
annotationMirror
- The annotation mirror@Nullable protected abstract String getRepeatableNameForType(T annotationType)
annotationType
- The annotation mirrorprotected AnnotationValue readNestedAnnotationValue(T originatingElement, A annotationMirror)
originatingElement
- The originating elementannotationMirror
- The annotationprotected abstract Optional<T> getAnnotationMirror(String annotationName)
annotationName
- The annotation nameprotected Map<CharSequence,Object> populateAnnotationData(T originatingElement, @Nullable T parent, A annotationMirror, DefaultAnnotationMetadata metadata, boolean isDeclared, RetentionPolicy retentionPolicy, boolean allowAliases)
originatingElement
- The element the annotation data originates fromparent
- The parent elementannotationMirror
- The annotationmetadata
- the metadataisDeclared
- Is the annotation a declared annotationretentionPolicy
- The retention policyallowAliases
- Whether aliases are allowedprotected Map<CharSequence,Object> populateAnnotationData(T originatingElement, boolean originatingElementIsSameParent, A annotationMirror, DefaultAnnotationMetadata metadata, boolean isDeclared, RetentionPolicy retentionPolicy, boolean allowAliases)
originatingElement
- The element the annotation data originates fromoriginatingElementIsSameParent
- Whether the originating element is considered a parent elementannotationMirror
- The annotationmetadata
- the metadataisDeclared
- Is the annotation a declared annotationretentionPolicy
- The retention policyallowAliases
- Whether aliases are allowed@Nullable protected abstract T getAnnotationMember(T originatingElement, CharSequence member)
originatingElement
- The originatig elementmember
- The member@NonNull protected List<AnnotationMapper<? extends Annotation>> getAnnotationMappers(@NonNull String annotationName)
annotationName
- The annotation name@NonNull protected List<AnnotationTransformer<Annotation>> getAnnotationTransformers(@NonNull String annotationName)
annotationName
- The annotation nameprotected abstract VisitorContext createVisitorContext()
@NonNull protected abstract RetentionPolicy getRetentionPolicy(@NonNull T annotation)
annotation
- The annotationprotected boolean isExcludedAnnotation(@NonNull T element, @NonNull String annotationName)
element
- The elementannotationName
- The annotation nameprotected abstract boolean isInheritedAnnotation(@NonNull A annotationMirror)
annotationMirror
- The mirrorprotected abstract boolean isInheritedAnnotationType(@NonNull T annotationType)
annotationType
- The mirror@NonNull protected abstract Map<String,? extends T> getAnnotationMembers(@NonNull String annotationType)
annotationType
- The annotation typeprotected abstract boolean hasSimpleAnnotation(T element, String simpleName)
element
- The elementsimpleName
- The simple name, ie Class.getSimpleName()
@Internal public static void addMutatedMetadata(String declaringType, Object element, AnnotationMetadata metadata)
declaringType
- The declaring typeelement
- The elementmetadata
- The metadata@Internal public static boolean isMetadataMutated(String declaringType, Object element)
declaringType
- The declaring typeelement
- The element@Internal public static void clearMutated()
@Internal public static void clearCaches()
@Internal public static void copyToRuntime()
@Internal public static boolean isAnnotationMapped(@Nullable String annotationName)
annotationName
- The annotation name@Internal public static Set<String> getMappedAnnotationNames()
@Internal public static Set<String> getMappedAnnotationPackages()
public <A2 extends Annotation> AnnotationMetadata annotate(AnnotationMetadata annotationMetadata, AnnotationValue<A2> annotationValue)
A2
- The annotation typeannotationMetadata
- The annotation metadataannotationValue
- The annotation valuepublic AnnotationMetadata removeAnnotation(AnnotationMetadata annotationMetadata, String annotationType)
annotationMetadata
- The annotation metadataannotationType
- The annotation typepublic AnnotationMetadata removeStereotype(AnnotationMetadata annotationMetadata, String annotationType)
annotationMetadata
- The annotation metadataannotationType
- The annotation type@NonNull public <T1 extends Annotation> AnnotationMetadata removeAnnotationIf(@NonNull AnnotationMetadata annotationMetadata, @NonNull Predicate<AnnotationValue<T1>> predicate)
T1
- The annotation typeannotationMetadata
- The annotation metadatapredicate
- The predicate