RFR: 8355442: Reference field lambda forms with type casts are not generated [v2]
Chen Liang
liach at openjdk.org
Tue Apr 29 23:09:50 UTC 2025
On Sat, 26 Apr 2025 23:47:01 GMT, Chen Liang <liach at openjdk.org> wrote:
>> Currently, we are not generating all possible field lambda forms.
>>
>> Field lambda forms have these dimensions:
>> - get/set
>> - instance/static/static+class init barrier
>> - plain/volatile
>> - 8 primitive types, no-cast object, object with cast
>>
>> Bringing to a total of 2 × 3 × 2 × 10 = 120 lambda forms.
>>
>> Previously, the ones with init barrier or object with cast types were not generated due to spamming the Kind enum. In retrospect, I believe skipping the object with cast form is a poor choice - tons of Java fields are using non-interface types. Also seems the volatile accessors were omitted in InvokerBytecodeGenerator, which made their pregen useless.
>>
>> I have utilized erased method types to distinguish forms - get/set, 5 basic types, and instance/static can be distinguished by the types, so the Kind enums now only represent init, volatile, and non-basic types (byte, char, short, boolean, casts), bringing the total constants to 24 down from 40 previously.
>>
>> In the long run, we should investigate update `Kind` to allow flexible representations - an enum is too restrictive especially with the erased types.
>
> Chen Liang has updated the pull request incrementally with one additional commit since the last revision:
>
> use var
Thank you for your review!
-------------
PR Comment: https://git.openjdk.org/jdk/pull/24887#issuecomment-2840427737
More information about the core-libs-dev
mailing list