JDK 13 RFR of JDK-708660: (reflect) Clarifications to javadoc for getGeneric*Type methods in j.l.r
Joe Darcy
joe.darcy at oracle.com
Sat Jun 8 23:04:06 UTC 2019
Hello,
Please review the doc clarifications to address
JDK-708660: (reflect) Clarifications to javadoc for getGeneric*Type
methods in j.l.r
webrev: http://cr.openjdk.java.net/~darcy/7086604.0/
specdiff:
http://cr.openjdk.java.net/~darcy/7086604.0.specdiff/overview-summary.html
A few comments on the changes:
* The phrasing "type arguments" rather than "type parameters" is used as
appropriate.
* @Overrides are consistently used for the annotation-related methods.
* The bulk of the changes relate to noting whether or not *declaration
annotations* as opposed to *type annotations* are returned by a
particular method; see the JLS for more detailed discussion of the
differences. The annotations returned from the AnnotatedElement methods
as implemented by java.lang.{Class, Package, Module} and the classes in
java.lang.reflect.* are declaration annotations. The annotations
returned by the subtypes of AnnotatedType are *type annotations*. To
allow the declaration vs type annotation distinction to be indicated,
the basic method specs from AnnotatedElement are {@inheritDoc}'ed and
then augmented with the appropriate declaration or type annotation note.
For declaration annotations, these notes need to be added in
java.lang.Class, java.lang.Package, java.lang.Module,
java.lang.reflect.Parameter, and java.lang.reflection.AccessibleElement,
the latter being the common superclass of Field, Constructor,
Executable, etc. Adding the "type annotation" note to AnnotatedType
suffices to associate it with all the right subinterfaces. The
AnnotatedElement interface has three default methods and
java.lang.Module uses those default implementations. While would be
possible to introduce overrides in Module for the sole purpose of
hosting javadoc while the implementations defer to the ones in the
AnnotatedElement interface, I don't think it is worthwhile to do so. The
text for the isAnnotationPresent predicate was *not* updated to note
declaration vs type annotation; this is implicit by the operational
definition of the method in terms of getAnnotation's behavior.
I've filed a follow-up bug to make similar notes in the javax.lang.model
API, JDK-8225495: "Note whether returned annotations are declaration
annotations or type annotations."
Thanks,
-Joe
More information about the core-libs-dev
mailing list