Browse Source

Honor default values for implicit aliases in composed annotations

Spring Framework 5.2 introduced a regression for implicit aliases
declared via @AliasFor. Specifically, Spring's merged annotation
algorithms stopped honoring default values for implicit alias pairs if
the composed annotation was used without specifying the aliased
attributes.

This commit fixes this regression.

Closes gh-24110
pull/24135/head
wanxiangming1994 6 years ago committed by Sam Brannen
parent
commit
6f15f32be3
  1. 3
      spring-core/src/main/java/org/springframework/core/annotation/AnnotationTypeMapping.java
  2. 6
      spring-core/src/test/java/org/springframework/core/annotation/AnnotationTypeMappingsTests.java

3
spring-core/src/main/java/org/springframework/core/annotation/AnnotationTypeMapping.java

@ -646,6 +646,9 @@ final class AnnotationTypeMapping { @@ -646,6 +646,9 @@ final class AnnotationTypeMapping {
boolean isDefaultValue = (value == null ||
isEquivalentToDefaultValue(attribute, value, valueExtractor));
if (isDefaultValue || ObjectUtils.nullSafeEquals(lastValue, value)) {
if (result == -1) {
result = this.indexes[i];
}
continue;
}
if (lastValue != null && !ObjectUtils.nullSafeEquals(lastValue, value)) {

6
spring-core/src/test/java/org/springframework/core/annotation/AnnotationTypeMappingsTests.java

@ -368,13 +368,13 @@ class AnnotationTypeMappingsTests { @@ -368,13 +368,13 @@ class AnnotationTypeMappingsTests {
}
@Test
void resolveMirrorsWhenOnlyHasDefaultValuesResolvesNone() {
void resolveMirrorsWhenOnlyHasDefaultValuesUsesFirst() {
AnnotationTypeMapping mapping = AnnotationTypeMappings.forAnnotationType(
AliasPair.class).get(0);
Method[] resolved = resolveMirrorSets(mapping, WithDefaultValueAliasPair.class,
AliasPair.class);
assertThat(resolved[0]).isNull();
assertThat(resolved[1]).isNull();
assertThat(resolved[0].getName()).isEqualTo("a");
assertThat(resolved[1].getName()).isEqualTo("a");
}
@Test

Loading…
Cancel
Save