On Fri, 25 Apr 2025 20:30:15 GMT, Chen Liang <li...@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. src/java.base/share/classes/java/lang/invoke/DirectMethodHandle.java line 741: > 739: case VOID -> throw new InternalError(); > 740: }; > 741: StringBuilder sb = new StringBuilder(3 + name.length() + > (isVolatile ? 8 : 0)) var sb = new StringBuilder(3 + name.length() + (isVolatile ? 8 : 0)) -------- The type of StringBulder sb here is clear, can we use var? ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/24887#discussion_r2061664197