Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The
Annotation.equals()
contract directly states that for two annotation objects to be equal, they must (among others) both implement the [same] annotation interface.The CDI TCK used to create instances of memberless annotations simply by instantiating an anonymous subclass of
AnnotationLiteral
, which doesn't implement the annotation interface and hence is invalid.It has never been a problem, because
AnnotationLiteral
implements equality in a slightly more permissive manner: instead of checking that both objects implement the same annotation interface, it checks that both objects are annotations that have an equalannotationType()
. It becomes problematic when an implementation uses a different mechanism to instantiate annotations than extendingAnnotationLiteral
, one that closely follows theAnnotation
contract.This commit replaces all usages of such anonymous subclasses by proper
AnnotationLiteral
subclasses that implement the annotation interface as well.