|
|
|
@ -164,6 +164,7 @@ public class AnnotationMetadataTests { |
|
|
|
assertMultipleAnnotationsWithIdenticalAttributeNames(metadata); |
|
|
|
assertMultipleAnnotationsWithIdenticalAttributeNames(metadata); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private void assertMultipleAnnotationsWithIdenticalAttributeNames(AnnotationMetadata metadata) { |
|
|
|
private void assertMultipleAnnotationsWithIdenticalAttributeNames(AnnotationMetadata metadata) { |
|
|
|
AnnotationAttributes attributes1 = (AnnotationAttributes) metadata.getAnnotationAttributes( |
|
|
|
AnnotationAttributes attributes1 = (AnnotationAttributes) metadata.getAnnotationAttributes( |
|
|
|
NamedAnnotation1.class.getName(), false); |
|
|
|
NamedAnnotation1.class.getName(), false); |
|
|
|
@ -211,6 +212,8 @@ public class AnnotationMetadataTests { |
|
|
|
assertEquals("direct", method.getAnnotationAttributes(DirectAnnotation.class.getName()).get("value")); |
|
|
|
assertEquals("direct", method.getAnnotationAttributes(DirectAnnotation.class.getName()).get("value")); |
|
|
|
List<Object> allMeta = method.getAllAnnotationAttributes(DirectAnnotation.class.getName()).get("value"); |
|
|
|
List<Object> allMeta = method.getAllAnnotationAttributes(DirectAnnotation.class.getName()).get("value"); |
|
|
|
assertThat(new HashSet<Object>(allMeta), is(equalTo(new HashSet<Object>(Arrays.asList("direct", "meta"))))); |
|
|
|
assertThat(new HashSet<Object>(allMeta), is(equalTo(new HashSet<Object>(Arrays.asList("direct", "meta"))))); |
|
|
|
|
|
|
|
allMeta = method.getAllAnnotationAttributes(DirectAnnotation.class.getName()).get("additional"); |
|
|
|
|
|
|
|
assertThat(new HashSet<Object>(allMeta), is(equalTo(new HashSet<Object>(Arrays.asList("direct"))))); |
|
|
|
|
|
|
|
|
|
|
|
assertTrue(metadata.isAnnotated(IsAnnotatedAnnotation.class.getName())); |
|
|
|
assertTrue(metadata.isAnnotated(IsAnnotatedAnnotation.class.getName())); |
|
|
|
|
|
|
|
|
|
|
|
@ -251,6 +254,8 @@ public class AnnotationMetadataTests { |
|
|
|
assertEquals("direct", metadata.getAnnotationAttributes(DirectAnnotation.class.getName()).get("value")); |
|
|
|
assertEquals("direct", metadata.getAnnotationAttributes(DirectAnnotation.class.getName()).get("value")); |
|
|
|
allMeta = metadata.getAllAnnotationAttributes(DirectAnnotation.class.getName()).get("value"); |
|
|
|
allMeta = metadata.getAllAnnotationAttributes(DirectAnnotation.class.getName()).get("value"); |
|
|
|
assertThat(new HashSet<Object>(allMeta), is(equalTo(new HashSet<Object>(Arrays.asList("direct", "meta"))))); |
|
|
|
assertThat(new HashSet<Object>(allMeta), is(equalTo(new HashSet<Object>(Arrays.asList("direct", "meta"))))); |
|
|
|
|
|
|
|
allMeta = metadata.getAllAnnotationAttributes(DirectAnnotation.class.getName()).get("additional"); |
|
|
|
|
|
|
|
assertThat(new HashSet<Object>(allMeta), is(equalTo(new HashSet<Object>(Arrays.asList("direct"))))); |
|
|
|
} |
|
|
|
} |
|
|
|
{ // perform tests with classValuesAsString = true
|
|
|
|
{ // perform tests with classValuesAsString = true
|
|
|
|
AnnotationAttributes specialAttrs = (AnnotationAttributes) metadata.getAnnotationAttributes( |
|
|
|
AnnotationAttributes specialAttrs = (AnnotationAttributes) metadata.getAnnotationAttributes( |
|
|
|
@ -341,14 +346,16 @@ public class AnnotationMetadataTests { |
|
|
|
NestedAnno[] optionalArray() default { @NestedAnno(value = "optional", anEnum = SomeEnum.DEFAULT, classArray = Void.class) }; |
|
|
|
NestedAnno[] optionalArray() default { @NestedAnno(value = "optional", anEnum = SomeEnum.DEFAULT, classArray = Void.class) }; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Target({ ElementType.TYPE, ElementType.METHOD }) |
|
|
|
@Target({ElementType.TYPE, ElementType.METHOD}) |
|
|
|
@Retention(RetentionPolicy.RUNTIME) |
|
|
|
@Retention(RetentionPolicy.RUNTIME) |
|
|
|
public @interface DirectAnnotation { |
|
|
|
public @interface DirectAnnotation { |
|
|
|
|
|
|
|
|
|
|
|
String value(); |
|
|
|
String value(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String additional() default "direct"; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Target({ ElementType.TYPE }) |
|
|
|
@Target(ElementType.TYPE) |
|
|
|
@Retention(RetentionPolicy.RUNTIME) |
|
|
|
@Retention(RetentionPolicy.RUNTIME) |
|
|
|
public @interface IsAnnotatedAnnotation { |
|
|
|
public @interface IsAnnotatedAnnotation { |
|
|
|
} |
|
|
|
} |
|
|
|
@ -358,9 +365,11 @@ public class AnnotationMetadataTests { |
|
|
|
@DirectAnnotation("meta") |
|
|
|
@DirectAnnotation("meta") |
|
|
|
@IsAnnotatedAnnotation |
|
|
|
@IsAnnotatedAnnotation |
|
|
|
public @interface MetaAnnotation { |
|
|
|
public @interface MetaAnnotation { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
String additional() default "meta"; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Target({ ElementType.TYPE, ElementType.METHOD }) |
|
|
|
@Target({ElementType.TYPE, ElementType.METHOD}) |
|
|
|
@Retention(RetentionPolicy.RUNTIME) |
|
|
|
@Retention(RetentionPolicy.RUNTIME) |
|
|
|
@MetaAnnotation |
|
|
|
@MetaAnnotation |
|
|
|
public @interface MetaMetaAnnotation { |
|
|
|
public @interface MetaMetaAnnotation { |
|
|
|
@ -380,17 +389,18 @@ public class AnnotationMetadataTests { |
|
|
|
}, |
|
|
|
}, |
|
|
|
BAR { |
|
|
|
BAR { |
|
|
|
/* Do not delete! This subclassing is intentional. */ |
|
|
|
/* Do not delete! This subclassing is intentional. */ |
|
|
|
}; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Component("myName") |
|
|
|
@Component("myName") |
|
|
|
@Scope("myScope") |
|
|
|
@Scope("myScope") |
|
|
|
@SpecialAttr(clazz = String.class, state = Thread.State.NEW, nestedAnno = @NestedAnno(value = "na", anEnum = SomeEnum.LABEL1, classArray = { String.class }), nestedAnnoArray = { |
|
|
|
@SpecialAttr(clazz = String.class, state = Thread.State.NEW, |
|
|
|
@NestedAnno, @NestedAnno(value = "na1", anEnum = SomeEnum.LABEL2, classArray = { Number.class }) }) |
|
|
|
nestedAnno = @NestedAnno(value = "na", anEnum = SomeEnum.LABEL1, classArray = {String.class}), |
|
|
|
@SuppressWarnings({ "serial", "unused" }) |
|
|
|
nestedAnnoArray = {@NestedAnno, @NestedAnno(value = "na1", anEnum = SomeEnum.LABEL2, classArray = {Number.class})}) |
|
|
|
|
|
|
|
@SuppressWarnings({"serial", "unused"}) |
|
|
|
@DirectAnnotation("direct") |
|
|
|
@DirectAnnotation("direct") |
|
|
|
@MetaMetaAnnotation |
|
|
|
@MetaMetaAnnotation |
|
|
|
@EnumSubclasses({ SubclassEnum.FOO, SubclassEnum.BAR }) |
|
|
|
@EnumSubclasses({SubclassEnum.FOO, SubclassEnum.BAR}) |
|
|
|
private static class AnnotatedComponent implements Serializable { |
|
|
|
private static class AnnotatedComponent implements Serializable { |
|
|
|
|
|
|
|
|
|
|
|
@TestAutowired |
|
|
|
@TestAutowired |
|
|
|
@ -406,9 +416,8 @@ public class AnnotationMetadataTests { |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@SuppressWarnings({ "serial" }) |
|
|
|
@SuppressWarnings("serial") |
|
|
|
private static class AnnotatedComponentSubClass extends AnnotatedComponent { |
|
|
|
private static class AnnotatedComponentSubClass extends AnnotatedComponent { |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Target(ElementType.TYPE) |
|
|
|
@Target(ElementType.TYPE) |
|
|
|
|