After the ClassFile API migration, when serializable lambdas are requested for 
hidden class callers, illegal class name is generated for the serialization 
methods, which previously had legal yet unusable class names, as hidden classes 
cannot be described by a `CONSTANT_Class_info`.

This patch restores a similar older behavior of using legal yet unusable class 
names.  Previously, the invalid `.` in hidden class names was replaced by a `/` 
as if a package separator; this patch changes it to a `_` like that in the 
generated lambda's class name.

The bug report shows some unintended and erroneous usages of 
`LambdaMetafactory`.  To clarify and to persuade against misuse, I added a 
paragraph of API notes to `LambdaMetafactory`, describing the impact of this 
API being designed to support Java language features.  In particular, I used 
the scenario where people assumed LMf generates weak hidden classes, which 
happened in this issue report and in #12493, that misuse can lead to resource 
leaks.

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

Commit messages:
 - Specify consequence
 - 8343064: ClassFormatError: Illegal class name from 
InnerClassLambdaMetafactory

Changes: https://git.openjdk.org/jdk/pull/21912/files
  Webrev: https://webrevs.openjdk.org/?repo=jdk&pr=21912&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8343064
  Stats: 21 lines in 2 files changed: 17 ins; 0 del; 4 mod
  Patch: https://git.openjdk.org/jdk/pull/21912.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/21912/head:pull/21912

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

Reply via email to