Hi Joel,
On 10/24/2013 09:08 AM, Joel Borggrén-Franck wrote:
Hi Joe,
I think this a desirable change. Some design questions inline,
Also please note the related work going on here:
http://mail.openjdk.java.net/pipermail/core-libs-dev/2013-October/022590.html
On 24 okt 2013, at 15:31, Joe Darcy <[email protected]> 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
)
Here are some things that aren't clear to me:
Why do you need to add AnnotatedElementSupport?
I wanted somewhere to put code to be shared among the two default
methods. (Private methods in interfaces are not allowed in Java SE 8
sources.) The need for the helper class may go away after the code is
refactored / corrected.
We already have one version of getAssociatedAnnotations() (with a long
history of being broken). Can we somehow unify this?
To a first approximation, code in default methods can do things like
call other methods defined in the interface or throw an exception.
Can getAssociatedAnnotations be expressed in such terms?
Also, we did get into trouble when making isAnnotationPresent() a default? is
it different for getDeclaredAnnotations()?
Copying the reply to this question sent over on enhanced-metadata-discuss:
"No; we don't have the same hazard here [making this methods defaults]
as with isAnnotationPresent. The issue we ran into with making
isAnnotationPresent a default method was that isAnnotationPresent was
part of the original AnnotatedElement interface defined way back in Java
SE 5. An implementation decision in javac did not expose the existence
of default methods to code being compiled under source levels less than
8. That is a pragmatic choice and usually gives the desired result, but
not in this case.
Making the new-in-Java-SE-8 methods in AnnotatedElement defaults follows
the generally recommended way to evolve interfaces when new methods are
added to them. "
Will this work du to there being a concrete impl in all our concrete classes?
I did not really expect code in the JDK to use the logic in the default
methods. The default methods would be for implementations outside of the
JDK that didn't already have customized implementations of the new methods.
Considering Class is the only type where getAnnotationsByType() is different
from getDeclaredAnnotationsByType() isn't it cleaner to define
getAnnotationsByType() in terms of getDeclaredAnnotatinosByType() and override
in Class?
Hmm. I'll look into an approach along those lines. However, if possible,
I'd prefer to have both methods be logically stand along (even if they
share code).
Thanks for the comments,
-Joe