JDK 8 (initial) RFR for JDK-8005294 : Consider default methods for additions to AnnotatedElement

Peter Levart peter.levart at gmail.com
Thu Oct 24 14:10:52 UTC 2013


Hi Joe,

I see two problems with the implementation in *AnnotatedElementSupport*. 
The first is the treatment of declared-only annotations where the code 
returns either directly present or in-directly present repeatable 
annotations, but not both. So in the following example:

@Ann(1)
@AnnCont({@Ann(2), @Ann(3)})

it will only return [@Ann(1)], but I think it should return all of them 
[@Ann(1), @Ann(2), @Ann(3)] - does the spec. define that?

The other is the treatment of "associated" annotations, where the 
*AnnotatedElementSupport* implementation has similar problem as the 
Andreas' 1st attempt of at fixing 8004912 for j.l.Class. It turns out 
that inherited repeating annotations can not be implemented in terms of 
Class.getAnnotation(Class), since this method aggregates together 
inherited and declared annotations not taking account of "equivalence" 
of two possible representations of repeating annotations (with or 
without the container) thus loosing the information about where in the 
hierarchy repeating annotations of a particular type are declared. See 
the following discussion:

http://mail.openjdk.java.net/pipermail/core-libs-dev/2013-October/022190.html

Otherwise I think that implementing 
AnnotatedElement.get[Declared]AnnotationsByType(Class) consistently at 
the very root of hierarchy is a good idea. If I'm not mistaken, only 
j.l.Class defines the difference between getDeclaredAnnotationsByType 
and getAnnotationsByType - all other AnnotatedElements don't implement 
inheritance and those two methods are equivalent for them. What about 
implementing only the "declared" aspect as equivalent default methods in 
AnnotatedElements, and overriding getAnnotationsByType in j.l.Class ?


Regards, Peter

On 10/24/2013 09:31 AM, Joe Darcy wrote:
> Hello,
>
> Please review my initial implementation changes for
>
>     JDK-8005294 : Consider default methods for additions to 
> AnnotatedElement
>     http://cr.openjdk.java.net/~darcy/8005294.0/
>
> (Specification aspects of the review are taking place over at
> http://mail.openjdk.java.net/pipermail/enhanced-metadata-spec-discuss/2013-October/000279.html 
> )
>
> The webrev above is lacking tests. The basic testing approach I plan 
> to take is:
>
> * Declare an AnnotedElementDelegate type in the test file
> * An AnnotedElementDelegate wraps an existing AnnotatedElement object, 
> such as a java.lang.Class object or a java.lang.reflect.Method object. 
> Abstract methods of the AnnotatedElement interface are sent to the 
> base object; methods with defaults are run as defaults.
> * For annotation types including {null, PresentAnnotation, 
> MissingAnnotation, RepeatableAnnotation, ...} the behavior of 
> AnnotedElementDelegate.foo(arg) is compared for equality to 
> baseAnnotatedElement.foo(arg).
> * Base annotated elements will include a Class object (where 
> annotation inheritance can some input play) and a non-Class object.
>
> Thanks,
>
> -Joe
>




More information about the core-libs-dev mailing list