JDK 9 RFR of JDK-8074977: Constructor.getAnnotatedParameterTypes returns wrong value

Joel Borggrén-Franck joel.borggren.franck at gmail.com
Sat May 27 08:48:26 UTC 2017

Hi Joe,

Looks Good.

Nit: TypeAnnotationParser.java

"126         // If a constructor has a mandated outer this, that parameter
 127         // has no annotations and the annotations to parameter mapping
 128         // should be offset by 1."

>From memory this comment is a bit misleading since the outer this
might actually have a receiver type annotation. The outcome seem
correct though.


On Fri, May 19, 2017 at 11:31 PM, joe darcy <joe.darcy at oracle.com> wrote:
> Hello,
> Please review the webrev to fix
>     JDK-8074977: Constructor.getAnnotatedParameterTypes returns wrong value
>     http://cr.openjdk.java.net/~darcy/8074977.3/
> To condense a complicated situation, there are cases where the number of
> parameters present for a constructor in source code and the number of
> parameters present for that constructor in the class file differ. One of
> those cases occurs for the constructor of a non-static member class [1]
> where there is a leading parameter to accept the outer this argument.
> Bug JDK-8074977 reports on a situation where the type annotations on
> constructor parameters are incorrectly reported. Essentially, an off-by-one
> error is the cause since the annotation information is stored with respect
> to the number of parameters present in the source and an additional
> parameter is present at runtime.
> An analogous situation exists for declaration annotations and constructor
> parameters, declaration annotations being the traditional flavor of
> annotations.
> Type annotations and declaration annotations are read using different APIs
> so require separate fixes to detect the additional parameter and make the
> necessary adjustments in the returned information.
> The regression tests cover both the type annotation reading API and the two
> ways of reading declaration annotations on parameters, calling
> getParameterAnnotations on the constructor or call getParameters on the
> constructor and then calling getAnnotations on each parameter. The
> getParameters API was added in JDK 8.
> Static member and non-static member classes are used as test cases, as are
> constructors with and without generic type information.
> Thanks,
> -Joe
> [1]
> https://blogs.oracle.com/darcy/nested,-inner,-member,-and-top-level-classes

More information about the core-libs-dev mailing list