Fix handling of annotations on super classes in AnnotationsPropertySource

Closes gh-6006
pull/5980/merge
Andy Wilkinson 9 years ago
parent 3d0b682f0f
commit e9a226c8f8

@ -87,13 +87,24 @@ public class AnnotationsPropertySource extends EnumerablePropertySource<Class<?>
List<Annotation> mergedAnnotations = new ArrayList<Annotation>();
for (Annotation annotation : AnnotationUtils.getAnnotations(source)) {
if (!AnnotationUtils.isInJavaLangAnnotationPackage(annotation)) {
mergedAnnotations.add(AnnotatedElementUtils.getMergedAnnotation(root,
annotation.annotationType()));
mergedAnnotations
.add(findMergedAnnotation(root, annotation.annotationType()));
}
}
return mergedAnnotations;
}
private Annotation findMergedAnnotation(Class<?> source,
Class<? extends Annotation> annotationType) {
if (source == null) {
return null;
}
Annotation mergedAnnotation = AnnotatedElementUtils.getMergedAnnotation(source,
annotationType);
return mergedAnnotation != null ? mergedAnnotation
: findMergedAnnotation(source.getSuperclass(), annotationType);
}
private void collectProperties(Annotation annotation, Method attribute,
PropertyMapping typeMapping, Map<String, Object> properties) {
PropertyMapping attributeMapping = AnnotationUtils.getAnnotation(attribute,

@ -169,6 +169,22 @@ public class AnnotationsPropertySourceTests {
new AnnotationsPropertySource(PropertyMappedWithSelfAnnotatingAnnotation.class);
}
@Test
public void typeLevelAnnotationOnSuperClass() {
AnnotationsPropertySource source = new AnnotationsPropertySource(
PropertyMappedAnnotationOnSuperClass.class);
assertThat(source.getPropertyNames()).containsExactly("value");
assertThat(source.getProperty("value")).isEqualTo("abc");
}
@Test
public void aliasedPropertyMappedAttributeOnSuperClass() {
AnnotationsPropertySource source = new AnnotationsPropertySource(
AliasedPropertyMappedAnnotationOnSuperClass.class);
assertThat(source.getPropertyNames()).containsExactly("aliasing.value");
assertThat(source.getProperty("aliasing.value")).isEqualTo("baz");
}
static class NoAnnotation {
}
@ -359,4 +375,13 @@ public class AnnotationsPropertySourceTests {
}
static class PropertyMappedAnnotationOnSuperClass extends TypeLevel {
}
static class AliasedPropertyMappedAnnotationOnSuperClass
extends PropertyMappedAttributeWithAnAlias {
}
}

Loading…
Cancel
Save