Hi Peter, Joe,

On 24 okt 2013, at 22:10, Peter Levart <peter.lev...@gmail.com> wrote:

> 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?
> 

It does. If Ann is a repeatable annotation type then 
get[Declared]AnnotationsByType(Ann.class) should return all three. See 
8misc.pdf bottom of page 20.

> 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
> 

I agree with this. It is also a problem in the spec part of the review.

> 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 ?
> 

This sounds like a good idea. The default getAnnotatinosByType() should just be 
able to return getDeclaredAnnotationsByType().

cheers
/Joel

> 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 
>> 
> 

Reply via email to