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

joe darcy joe.darcy at oracle.com
Fri May 19 21:31:58 UTC 2017


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