On Sat, 16 Dec 2023 15:54:57 GMT, Chen Liang <li...@openjdk.org> wrote:

>> Adam Sotona has updated the pull request incrementally with one additional 
>> commit since the last revision:
>> 
>>   added missing comment
>
> src/java.base/share/classes/java/lang/invoke/InnerClassLambdaMetafactory.java 
> line 548:
> 
>> 546:     static ClassDesc classDesc(Class<?> cls) {
>> 547:         return cls.isHidden() ? 
>> ClassDesc.ofInternalName(cls.getName().replace('.', '/'))
>> 548:                               : 
>> ClassDesc.ofDescriptor(cls.descriptorString());
> 
> That said, all the usages already anticipate a valid `ClassDesc` that can be 
> encoded in bytecode except `implClass`. You should make 2 versions of 
> `classDesc()`, one that eagerly throws for all other usages, and another 
> special version that handles hidden class conversion (with the same code as 
> existing method) for 
> https://github.com/openjdk/jdk/pull/17108/files#diff-76236a0dd20022f749d95ad5890e2bece0c4ac212d1b2ffab90ca86875f14282R173

Split, thank you.

> src/java.base/share/classes/java/lang/invoke/TypeConvertingMethodAdapter.java 
> line 162:
> 
>> 160:         } else {
>> 161:             Class<?> src;
>> 162:             if (arg == functional || functional.isPrimitive()) {
> 
> `arg == functional` avoids a cast, though it's not in parity with the older 
> code. Should probably restore the old cast that takes a source argument to 
> avoid adding `==` checks to avoid casts.

Original cast is avoided when class names (derived from descriptors, derived 
from classes) are equal.
Correct me, please, but I think that this simple `arg == functional` check does 
the same job, without unnecessary String conversions and comparisons.
Or is there a case, where the cast is missing or added incorrectly?

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

PR Review Comment: https://git.openjdk.org/jdk/pull/17108#discussion_r1429931780
PR Review Comment: https://git.openjdk.org/jdk/pull/17108#discussion_r1429919564

Reply via email to