On Wed, 15 Feb 2023 22:44:21 GMT, David M. Lloyd <d...@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

Reply via email to