From 85016aef307b0d06180f2b031fc7e9280a6a21d2 Mon Sep 17 00:00:00 2001 From: Sam Brannen Date: Thu, 28 Nov 2019 18:45:58 +0100 Subject: [PATCH] Test status quo for @Inherited annotations in AnnotationMetadata This commit introduces failing assertions that are currently disabled via a boolean reproduceGh24077 flag. Setting that flag to true demonstrates the regression for StandardAnnotationMetadata and inconsistencies for SimpleAnnotationMetadata. See gh-24077 --- .../core/type/AnnotationMetadataTests.java | 42 ++++++++++++++++--- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/spring-core/src/test/java/org/springframework/core/type/AnnotationMetadataTests.java b/spring-core/src/test/java/org/springframework/core/type/AnnotationMetadataTests.java index b608918e0a16..5442c9b8d6ac 100644 --- a/spring-core/src/test/java/org/springframework/core/type/AnnotationMetadataTests.java +++ b/spring-core/src/test/java/org/springframework/core/type/AnnotationMetadataTests.java @@ -51,6 +51,9 @@ */ class AnnotationMetadataTests { + private static final boolean reproduceGh24077 = false; + + @Test void standardAnnotationMetadata() { AnnotationMetadata metadata = AnnotationMetadata.introspect(AnnotatedComponent.class); @@ -93,12 +96,23 @@ private void doTestSubClassAnnotationInfo(AnnotationMetadata metadata) { assertThat(metadata.isAnnotated(Component.class.getName())).isFalse(); assertThat(metadata.isAnnotated(Scope.class.getName())).isFalse(); assertThat(metadata.isAnnotated(SpecialAttr.class.getName())).isFalse(); + + if (reproduceGh24077) { + assertThat(metadata.isAnnotated(NamedComposedAnnotation.class.getName())).isTrue(); + assertThat(metadata.hasAnnotation(NamedComposedAnnotation.class.getName())).isTrue(); + assertThat(metadata.getAnnotationTypes()).containsExactly(NamedComposedAnnotation.class.getName()); + } + else { + assertThat(metadata.isAnnotated(NamedComposedAnnotation.class.getName())).isFalse(); + assertThat(metadata.hasAnnotation(NamedComposedAnnotation.class.getName())).isFalse(); + assertThat(metadata.getAnnotationTypes()).isEmpty(); + } + assertThat(metadata.hasAnnotation(Component.class.getName())).isFalse(); assertThat(metadata.hasAnnotation(Scope.class.getName())).isFalse(); assertThat(metadata.hasAnnotation(SpecialAttr.class.getName())).isFalse(); assertThat(metadata.hasMetaAnnotation(Component.class.getName())).isFalse(); assertThat(metadata.hasMetaAnnotation(MetaAnnotation.class.getName())).isFalse(); - assertThat(metadata.getAnnotationTypes()).hasSize(0); assertThat(metadata.getAnnotationAttributes(Component.class.getName())).isNull(); assertThat(metadata.getAnnotationAttributes(MetaAnnotation.class.getName(), false)).isNull(); assertThat(metadata.getAnnotationAttributes(MetaAnnotation.class.getName(), true)).isNull(); @@ -278,13 +292,31 @@ private void doTestAnnotationInfo(AnnotationMetadata metadata) { assertThat(metadata.getInterfaceNames().length).isEqualTo(1); assertThat(metadata.getInterfaceNames()[0]).isEqualTo(Serializable.class.getName()); + assertThat(metadata.isAnnotated(Component.class.getName())).isTrue(); + + if (reproduceGh24077) { + assertThat(metadata.isAnnotated(NamedComposedAnnotation.class.getName())).isTrue(); + } + assertThat(metadata.hasAnnotation(Component.class.getName())).isTrue(); assertThat(metadata.hasAnnotation(Scope.class.getName())).isTrue(); assertThat(metadata.hasAnnotation(SpecialAttr.class.getName())).isTrue(); - assertThat(metadata.getAnnotationTypes()).hasSize(6); - assertThat(metadata.getAnnotationTypes().contains(Component.class.getName())).isTrue(); - assertThat(metadata.getAnnotationTypes().contains(Scope.class.getName())).isTrue(); - assertThat(metadata.getAnnotationTypes().contains(SpecialAttr.class.getName())).isTrue(); + + if (reproduceGh24077) { + assertThat(metadata.hasAnnotation(NamedComposedAnnotation.class.getName())).isTrue(); + assertThat(metadata.getAnnotationTypes()).containsExactlyInAnyOrder( + Component.class.getName(), Scope.class.getName(), + SpecialAttr.class.getName(), DirectAnnotation.class.getName(), + MetaMetaAnnotation.class.getName(), EnumSubclasses.class.getName(), + NamedComposedAnnotation.class.getName()); + } + else { + assertThat(metadata.hasAnnotation(NamedComposedAnnotation.class.getName())).isFalse(); + assertThat(metadata.getAnnotationTypes()).containsExactlyInAnyOrder( + Component.class.getName(), Scope.class.getName(), + SpecialAttr.class.getName(), DirectAnnotation.class.getName(), + MetaMetaAnnotation.class.getName(), EnumSubclasses.class.getName()); + } AnnotationAttributes compAttrs = (AnnotationAttributes) metadata.getAnnotationAttributes(Component.class.getName()); assertThat(compAttrs).hasSize(1);