RFR: 8320575: generic type information lost on mandated parameters [v5]

Vicente Romero vromero at openjdk.org
Tue Dec 12 04:03:30 UTC 2023


On Tue, 12 Dec 2023 03:56:43 GMT, Vicente Romero <vromero at openjdk.org> wrote:

>> Reflection is not retrieving generic type information for mandated parameters. This is a known issue which has been explicitly stated in the API of some reflection methods. Fix for [JDK-8292275](https://bugs.openjdk.org/browse/JDK-8292275) made the parameters of compact constructors of record classes `mandated` as specified in the spec. But this implied that users that previous to this change could retrieve the generic type of parameters of compact constructors now they can't anymore. The proposed fix is to try to retrieve generic type information for mandated parameters if available plus changing the spec of the related reflection methods.
>> 
>> TIA
>
> Vicente Romero has updated the pull request incrementally with one additional commit since the last revision:
> 
>   removing comment

src/java.base/share/classes/java/lang/reflect/Executable.java line 343:

> 341:                 final Type[] out = new Type[nonGenericParamTypes.length];
> 342:                 final Parameter[] params = getParameters();
> 343:                 int fromidx = genericParamTypes.length - 1;

so provided that the parameters order is: synthetic parameters first, then mandated, if any, and finally explicit parameters. I think that it is safe to get as many parameters as possible from the genericParamTypes array, starting from the last element of the array, and if this array is shorter than the nonGenericParamTypes array, then the difference must be due to the presence of synthetic parameters, and we take the type of those from the nonGenericParamTypes array

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/17070#discussion_r1423374618


More information about the core-libs-dev mailing list