Polish MergedAnnotation API internals
This commit is contained in:
parent
2b3fdfabb2
commit
b841e8560c
|
@ -30,7 +30,7 @@ import org.springframework.util.ConcurrentReferenceHashMap;
|
|||
* Provides {@link AnnotationTypeMapping} information for a single source
|
||||
* annotation type. Performs a recursive breadth first crawl of all
|
||||
* meta-annotations to ultimately provide a quick way to map the attributes of
|
||||
* root {@link Annotation}.
|
||||
* a root {@link Annotation}.
|
||||
*
|
||||
* <p>Supports convention based merging of meta-annotations as well as implicit
|
||||
* and explicit {@link AliasFor @AliasFor} aliases. Also provides information
|
||||
|
@ -81,14 +81,12 @@ final class AnnotationTypeMappings {
|
|||
}
|
||||
|
||||
private void addMetaAnnotationsToQueue(Deque<AnnotationTypeMapping> queue, AnnotationTypeMapping source) {
|
||||
Annotation[] metaAnnotations =
|
||||
AnnotationsScanner.getDeclaredAnnotations(source.getAnnotationType(), false);
|
||||
Annotation[] metaAnnotations = AnnotationsScanner.getDeclaredAnnotations(source.getAnnotationType(), false);
|
||||
for (Annotation metaAnnotation : metaAnnotations) {
|
||||
if (!isMappable(source, metaAnnotation)) {
|
||||
continue;
|
||||
}
|
||||
Annotation[] repeatedAnnotations = this.repeatableContainers
|
||||
.findRepeatedAnnotations(metaAnnotation);
|
||||
Annotation[] repeatedAnnotations = this.repeatableContainers.findRepeatedAnnotations(metaAnnotation);
|
||||
if (repeatedAnnotations != null) {
|
||||
for (Annotation repeatedAnnotation : repeatedAnnotations) {
|
||||
if (!isMappable(source, metaAnnotation)) {
|
||||
|
@ -103,9 +101,7 @@ final class AnnotationTypeMappings {
|
|||
}
|
||||
}
|
||||
|
||||
private void addIfPossible(Deque<AnnotationTypeMapping> queue,
|
||||
AnnotationTypeMapping source, Annotation ann) {
|
||||
|
||||
private void addIfPossible(Deque<AnnotationTypeMapping> queue, AnnotationTypeMapping source, Annotation ann) {
|
||||
addIfPossible(queue, source, ann.annotationType(), ann);
|
||||
}
|
||||
|
||||
|
@ -183,21 +179,20 @@ final class AnnotationTypeMappings {
|
|||
static AnnotationTypeMappings forAnnotationType(
|
||||
Class<? extends Annotation> annotationType, AnnotationFilter annotationFilter) {
|
||||
|
||||
return forAnnotationType(annotationType,
|
||||
RepeatableContainers.standardRepeatables(), annotationFilter);
|
||||
return forAnnotationType(annotationType, RepeatableContainers.standardRepeatables(), annotationFilter);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create {@link AnnotationTypeMappings} for the specified annotation type.
|
||||
* @param annotationType the source annotation type
|
||||
* @param repeatableContainers the repeatable containers that may be used by
|
||||
* the meta-annotations
|
||||
* @param annotationFilter the annotation filter used to limit which
|
||||
* annotations are considered
|
||||
* @return type mappings for the annotation type
|
||||
*/
|
||||
static AnnotationTypeMappings forAnnotationType(
|
||||
Class<? extends Annotation> annotationType,
|
||||
RepeatableContainers repeatableContainers,
|
||||
AnnotationFilter annotationFilter) {
|
||||
static AnnotationTypeMappings forAnnotationType(Class<? extends Annotation> annotationType,
|
||||
RepeatableContainers repeatableContainers, AnnotationFilter annotationFilter) {
|
||||
|
||||
if (repeatableContainers == RepeatableContainers.standardRepeatables()) {
|
||||
return standardRepeatablesCache.computeIfAbsent(annotationFilter,
|
||||
|
@ -207,8 +202,7 @@ final class AnnotationTypeMappings {
|
|||
return noRepeatablesCache.computeIfAbsent(annotationFilter,
|
||||
key -> new Cache(repeatableContainers, key)).get(annotationType);
|
||||
}
|
||||
return new AnnotationTypeMappings(repeatableContainers, annotationFilter,
|
||||
annotationType);
|
||||
return new AnnotationTypeMappings(repeatableContainers, annotationFilter, annotationType);
|
||||
}
|
||||
|
||||
static void clearCache() {
|
||||
|
|
|
@ -326,7 +326,7 @@ public interface MergedAnnotations extends Iterable<MergedAnnotation<Annotation>
|
|||
static MergedAnnotations from(AnnotatedElement element, SearchStrategy searchStrategy,
|
||||
RepeatableContainers repeatableContainers) {
|
||||
|
||||
return TypeMappedAnnotations.from(element, searchStrategy, repeatableContainers, AnnotationFilter.PLAIN);
|
||||
return from(element, searchStrategy, repeatableContainers, AnnotationFilter.PLAIN);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -340,7 +340,7 @@ public interface MergedAnnotations extends Iterable<MergedAnnotation<Annotation>
|
|||
* @param annotationFilter an annotation filter used to restrict the
|
||||
* annotations considered
|
||||
* @return a {@link MergedAnnotations} instance containing the merged
|
||||
* element annotations
|
||||
* annotations for the supplied element
|
||||
*/
|
||||
static MergedAnnotations from(AnnotatedElement element, SearchStrategy searchStrategy,
|
||||
RepeatableContainers repeatableContainers, AnnotationFilter annotationFilter) {
|
||||
|
@ -386,7 +386,7 @@ public interface MergedAnnotations extends Iterable<MergedAnnotation<Annotation>
|
|||
* @return a {@link MergedAnnotations} instance containing the annotations
|
||||
*/
|
||||
static MergedAnnotations from(Object source, Annotation[] annotations, RepeatableContainers repeatableContainers) {
|
||||
return TypeMappedAnnotations.from(source, annotations, repeatableContainers, AnnotationFilter.PLAIN);
|
||||
return from(source, annotations, repeatableContainers, AnnotationFilter.PLAIN);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -28,6 +28,7 @@ import java.util.ArrayList;
|
|||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.IntStream;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
|
@ -38,6 +39,7 @@ import org.springframework.core.annotation.AnnotationTypeMapping.MirrorSets.Mirr
|
|||
import org.springframework.lang.UsesSunMisc;
|
||||
import org.springframework.util.ReflectionUtils;
|
||||
|
||||
import static java.util.stream.Collectors.toList;
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
|
||||
|
||||
|
@ -500,11 +502,7 @@ class AnnotationTypeMappingsTests {
|
|||
private List<AnnotationTypeMapping> getAll(AnnotationTypeMappings mappings) {
|
||||
// AnnotationTypeMappings does not implement Iterable so we don't create
|
||||
// too many garbage Iterators
|
||||
List<AnnotationTypeMapping> result = new ArrayList<>(mappings.size());
|
||||
for (int i = 0; i < mappings.size(); i++) {
|
||||
result.add(mappings.get(i));
|
||||
}
|
||||
return result;
|
||||
return IntStream.range(0, mappings.size()).mapToObj(mappings::get).collect(toList());
|
||||
}
|
||||
|
||||
private List<String> getNames(MirrorSet mirrorSet) {
|
||||
|
|
Loading…
Reference in New Issue