RFR: JDK15-8242529: javac defines type annotations incorrectly for record members (constructor and property accessor)

Jan Lahoda jan.lahoda at oracle.com
Thu Jul 9 16:25:57 UTC 2020

Looks good to me. A minor nit might be to move the JCVariableDecl 
recordField into the then section of the subsequent if (so that it is 
not computed unless necessary).


On 09. 07. 20 4:31, Vicente Romero wrote:
> Hi,
> Please review fix for [1] at [2]. Current record implementation is not 
> forward nested type annotations to generated members like in:
> record R(@RegularAnnotation @TypeAnnotation Callable<@TypeAnnotation ?> foo) {}
> This patch is fixing one issue that show up in two different generated 
> record members:
>      - the accessor corresponding to the record component
>      - the corresponding parameter in the canonical constructor
> The issue is that the current implementation is not able to correctly 
> generate the annotated types for these components when such an annotated 
> type has "inner" type annotations like it is the case of `foo` in the 
> example which has `TypeAnnotation` applied to the wildcard. In the case 
> of the corresponding parameter in the canonical constructor the 
> annotated type was generated correctly but the class file reflected the 
> internal type annotation as applied to a field not to a method 
> parameter. In the case of the accessor the inner annotation was not 
> there at all. The patch is making a copy of the expression defining the 
> type of the record component and placing it that the right place for 
> both generated members.
> Thanks,
> Vicente
> [1] https://bugs.openjdk.java.net/browse/JDK-8242529
> [2] http://cr.openjdk.java.net/~vromero/8242529/webrev.00/

More information about the compiler-dev mailing list