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