Skip to content

Commit

Permalink
Polish MergedAnnotation API internals
Browse files Browse the repository at this point in the history
  • Loading branch information
sbrannen authored and xcl(徐程林) committed Aug 16, 2020
1 parent 49a42f0 commit 03c6258
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 24 deletions.
Expand Up @@ -30,7 +30,7 @@
* 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
Expand Down Expand Up @@ -81,14 +81,12 @@ private void addAllMappings(Class<? extends Annotation> annotationType) {
}

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)) {
Expand All @@ -103,9 +101,7 @@ private void addMetaAnnotationsToQueue(Deque<AnnotationTypeMapping> queue, Annot
}
}

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);
}

Expand Down Expand Up @@ -183,21 +179,20 @@ static AnnotationTypeMappings forAnnotationType(Class<? extends Annotation> anno
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,
Expand All @@ -207,8 +202,7 @@ static AnnotationTypeMappings forAnnotationType(
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() {
Expand Down
Expand Up @@ -326,7 +326,7 @@ static MergedAnnotations from(AnnotatedElement element, SearchStrategy searchStr
static MergedAnnotations from(AnnotatedElement element, SearchStrategy searchStrategy,
RepeatableContainers repeatableContainers) {

return TypeMappedAnnotations.from(element, searchStrategy, repeatableContainers, AnnotationFilter.PLAIN);
return from(element, searchStrategy, repeatableContainers, AnnotationFilter.PLAIN);
}

/**
Expand All @@ -340,7 +340,7 @@ static MergedAnnotations from(AnnotatedElement element, SearchStrategy searchStr
* @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) {
Expand Down Expand Up @@ -386,7 +386,7 @@ static MergedAnnotations from(Object source, Annotation... annotations) {
* @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);
}

/**
Expand Down
Expand Up @@ -28,6 +28,7 @@
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.stream.IntStream;

import javax.annotation.Nullable;

Expand All @@ -38,6 +39,7 @@
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;

Expand Down Expand Up @@ -500,11 +502,7 @@ private AnnotationTypeMapping getMapping(AnnotationTypeMappings mappings,
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) {
Expand Down

0 comments on commit 03c6258

Please sign in to comment.