Skip to content

Favor more locally declared composed annotations over inherited annotations in the TestContext framework [SPR-12749] #17346

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
spring-projects-issues opened this issue Feb 24, 2015 · 3 comments
Assignees
Labels
in: test Issues in the test module type: bug A general bug
Milestone

Comments

@spring-projects-issues
Copy link
Collaborator

spring-projects-issues commented Feb 24, 2015

David Erickson opened SPR-12749 and commented

Specific case: a test class is annotated with a meta annotation that itself is annotated with a TestExecutionListeners annotation, and the test class also extends a parent class annotated with a TestExecutionListeners annotation (say AbstractJunit4SpringContextTests).

In this case, MetaAnnotationUtils.findAnnotationDescriptor returns a AnnotationDescriptor class that is correct on all of its fields, except for getAnnotationAttributes(), which is incorrectly returning the attributes of the TestExecutionListeners from the parent class, rather than the meta annotation, which is incorrect based on the description of MetaAnnotationUtils.findAnnotationDescriptor:

The algorithm operates as follows:

Search for the annotation on the given class and return a corresponding AnnotationDescriptor if found.
Recursively search through all annotations that the given class declares.
Recursively search through the superclass hierarchy of the given class.

The net result being the test framework does not pick up my declared TestExecutionListeners from the meta annotation any time a parent of the Test class also declares TestExecutionListeners. I added a spring-framework-issues reproducible project to demonstrate the issue.


Affects: 4.1.4

Reference URL: spring-attic/spring-framework-issues#92

Issue Links:

@spring-projects-issues
Copy link
Collaborator Author

spring-projects-issues commented Feb 24, 2015

Sam Brannen commented

I will investigate this issue in detail in the coming weeks; however, please note that this is very likely a duplicate of #16221.

@spring-projects-issues
Copy link
Collaborator Author

David Erickson commented

Agreed, it does sound very similar.

@spring-projects-issues
Copy link
Collaborator Author

spring-projects-issues commented Apr 22, 2015

Sam Brannen commented

Although #16221 will cover such support in a generic fashion across the framework, I have already implemented a fix that is local to the spring-test module as described in the comments for GitHub commit 69b0791:

Favor local, composed annotations in the TCF

Prior to this commit, AnnotationAttributes retrieved from
MetaAnnotationUtils's AnnotationDescriptor could contain attributes
from the wrong annotation if an inherited annotation shadowed a locally
declared composed annotation.

This commit addresses this issue by invoking the new
getAnnotationAttributes() method in AnnotatedElementUtils that provides
a flag to control whether superclasses should be searched -- which
coincidentally processes local annotations before searching the class
hierarchy.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
in: test Issues in the test module type: bug A general bug
Projects
None yet
Development

No branches or pull requests

2 participants