RFR: 8292914: Drop the counter from lambda class names [v2]

Mandy Chung mchung at openjdk.org
Wed Feb 15 22:55:16 UTC 2023


On Wed, 15 Feb 2023 22:44:21 GMT, David M. Lloyd <duke at openjdk.org> wrote:

>> The class generated for lambda proxies is now defined as a hidden class. This means that the counter, which was used to ensure a unique class name and avoid clashes, is now redundant. In addition to performing redundant work, this also impacts build reproducibility for native image generators which might already have a strategy to cope with hidden classes but cannot cope with indeterminate definition order for lambda proxy classes.
>> 
>> This solves JDK-8292914 by making lambda proxy names always be stable without any configuration needed. This would also replace #10024.
>
> David M. Lloyd has refreshed the contents of this pull request, and previous commits have been removed. The incremental views will show differences compared to the previous content of the PR. The pull request contains one new commit since the last revision:
> 
>   8292914: Drop the counter from lambda class names
>   
>   The class generated for lambda proxies is now defined as a hidden class. This means that the counter, which was used to ensure a unique class name and avoid clashes, is now redundant. In addition to performing redundant work, this also impacts build reproducibility for native image generators which might already have a strategy to cope with hidden classes but cannot cope with indeterminate definition order for lambda proxy classes.
>   
>   Additionally, the lambda proxy class dumper is enhanced to prepend a raw timestamp before the filename.

This would address my concern.  If the hidden class was defined successfully, use the hidden class name as the filename;  otherwise, construct the file name a different counter - I also like Brian's suggestion "$timestamp-$classname$" for the reasons he noted.

Note that the hidden class name returned by `Class::getName` is `p.Foo$Lambda$$  + "/" + <suffix>`.   When dumping to a file, the pathname should be `p/Foo$Lambda$$.<suffix>` matching the type descriptor (converting '/' to '.').

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

PR: https://git.openjdk.org/jdk/pull/12579


More information about the core-libs-dev mailing list