Deprecate SynthesizedAnnotation and related methods

Since Spring no longer adds the SynthesizedAnnotation interface to the
JDK dynamic proxy used to synthesize an annotation, this commit
officially deprecates SynthesizedAnnotation and related methods in
RuntimeHintsUtils.

See gh-29041, gh-29054
Closes gh-29053
This commit is contained in:
Sam Brannen
2022-09-02 11:55:22 +02:00
parent 0ec03a8dd6
commit 69f23095b8
12 changed files with 37 additions and 12 deletions

View File

@@ -31,7 +31,6 @@ import org.springframework.aot.hint.RuntimeHints;
import org.springframework.aot.hint.TypeReference;
import org.springframework.aot.hint.predicate.RuntimeHintsPredicates;
import org.springframework.core.annotation.AliasFor;
import org.springframework.core.annotation.SynthesizedAnnotation;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
@@ -95,11 +94,13 @@ class ReflectiveRuntimeHintsRegistrarTests {
}
@Test
@SuppressWarnings("deprecation")
void shouldRegisterAnnotationProxy() {
process(SampleMethodMetaAnnotatedBeanWithAlias.class);
RuntimeHints runtimeHints = this.runtimeHints;
assertThat(RuntimeHintsPredicates.proxies().forInterfaces(
SampleInvoker.class, SynthesizedAnnotation.class)).accepts(runtimeHints);
assertThat(RuntimeHintsPredicates.proxies()
.forInterfaces(SampleInvoker.class, org.springframework.core.annotation.SynthesizedAnnotation.class))
.accepts(runtimeHints);
}
@Test

View File

@@ -28,7 +28,6 @@ import org.springframework.aot.hint.TypeReference;
import org.springframework.core.annotation.AliasFor;
import org.springframework.core.annotation.MergedAnnotation;
import org.springframework.core.annotation.MergedAnnotations;
import org.springframework.core.annotation.SynthesizedAnnotation;
import static org.assertj.core.api.Assertions.assertThat;
@@ -43,6 +42,7 @@ class RuntimeHintsUtilsTests {
private final RuntimeHints hints = new RuntimeHints();
@Test
@SuppressWarnings("deprecation")
void registerSynthesizedAnnotation() {
RuntimeHintsUtils.registerSynthesizedAnnotation(this.hints, SampleInvoker.class);
assertThat(this.hints.proxies().jdkProxies()).singleElement()
@@ -50,6 +50,7 @@ class RuntimeHintsUtilsTests {
}
@Test
@SuppressWarnings("deprecation")
void registerAnnotationIfNecessaryWithNonSynthesizedAnnotation() throws NoSuchFieldException {
MergedAnnotation<SampleInvoker> annotation = MergedAnnotations
.from(TestBean.class.getField("sampleInvoker")).get(SampleInvoker.class);
@@ -58,6 +59,7 @@ class RuntimeHintsUtilsTests {
}
@Test
@SuppressWarnings("deprecation")
void registerAnnotationIfNecessaryWithLocalAliases() throws NoSuchFieldException {
MergedAnnotation<LocalMapping> annotation = MergedAnnotations
.from(TestBean.class.getField("localMapping")).get(LocalMapping.class);
@@ -67,6 +69,7 @@ class RuntimeHintsUtilsTests {
}
@Test
@SuppressWarnings("deprecation")
void registerAnnotationIfNecessaryWithMetaAttributeOverride() throws NoSuchFieldException {
MergedAnnotation<SampleInvoker> annotation = MergedAnnotations
.from(TestBean.class.getField("retryInvoker")).get(SampleInvoker.class);
@@ -76,6 +79,7 @@ class RuntimeHintsUtilsTests {
}
@Test
@SuppressWarnings("deprecation")
void registerAnnotationIfNecessaryWithSynthesizedAttribute() throws NoSuchFieldException {
MergedAnnotation<RetryContainer> annotation = MergedAnnotations
.from(TestBean.class.getField("retryContainer")).get(RetryContainer.class);
@@ -84,9 +88,11 @@ class RuntimeHintsUtilsTests {
.satisfies(annotationProxy(RetryContainer.class));
}
@SuppressWarnings("deprecation")
private Consumer<JdkProxyHint> annotationProxy(Class<?> type) {
return jdkProxyHint -> assertThat(jdkProxyHint.getProxiedInterfaces())
.containsExactly(TypeReference.of(type), TypeReference.of(SynthesizedAnnotation.class));
.containsExactly(TypeReference.of(type),
TypeReference.of(org.springframework.core.annotation.SynthesizedAnnotation.class));
}