Avoid computeIfAbsent for createMappings which calls back into same map

Closes gh-35944
This commit is contained in:
Juergen Hoeller
2025-12-04 00:12:22 +01:00
parent 96aadc2b12
commit 667851c0fa
@@ -78,6 +78,7 @@ final class AnnotationTypeMappings {
private void addAllMappings(Class<? extends Annotation> annotationType,
Set<Class<? extends Annotation>> visitedAnnotationTypes) {
Deque<AnnotationTypeMapping> queue = new ArrayDeque<>();
addIfPossible(queue, null, annotationType, null, false, visitedAnnotationTypes);
while (!queue.isEmpty()) {
@@ -273,11 +274,19 @@ final class AnnotationTypeMappings {
*/
AnnotationTypeMappings get(Class<? extends Annotation> annotationType,
Set<Class<? extends Annotation>> visitedAnnotationTypes) {
return this.mappings.computeIfAbsent(annotationType, key -> createMappings(key, visitedAnnotationTypes));
AnnotationTypeMappings result = this.mappings.get(annotationType);
if (result != null) {
return result;
}
result = createMappings(annotationType, visitedAnnotationTypes);
AnnotationTypeMappings existing = this.mappings.putIfAbsent(annotationType, result);
return (existing != null ? existing : result);
}
private AnnotationTypeMappings createMappings(Class<? extends Annotation> annotationType,
Set<Class<? extends Annotation>> visitedAnnotationTypes) {
return new AnnotationTypeMappings(this.repeatableContainers, this.filter, annotationType,
visitedAnnotationTypes);
}