On Tue, 11 Feb 2025 08:03:23 GMT, Adam Sotona <asot...@openjdk.org> wrote:

>> The ClassFile API promotes usage of constant nominal descriptors over 
>> literal strings. However, for `class` file parsing, currently the efficient 
>> way to check if a constant pool entry matches a desired descriptor is via 
>> unrolling them back to strings. However, string unrolling is ugly, and often 
>> times confusing, such as internal names versus field descriptors.
>> 
>> As a result, I propose to provide new methods that compare constant pool 
>> entries with the potential symbolic descriptors they represent. This is no 
>> less efficient as checking raw string equality, avoids exceptional failure 
>> behaviors of conversion to symbolic descriptors, and avoids potential 
>> programmer errors stemming from raw string handling. See the CSR for a full 
>> story.
>
> src/java.base/share/classes/java/lang/classfile/constantpool/Utf8Entry.java 
> line 95:
> 
>> 93:      * @since 25
>> 94:      */
>> 95:     boolean equalsSymbol(ClassDesc desc);
> 
> Ambiguity of class internal name vs. descriptor serialization might be 
> confusing:
> 
> classEntry.equalsSymbol(classDesc) != 
> classEntry.name().equalsSymbol(classDesc)
> 
> I think it should be more highlighted to avoid mistakes.

I think the best way to avoid these confusions is, in addition to specifying in 
the docs, renaming the methods on `Utf8Entry` to include the word "descriptor", 
like `equalsDescriptorString`, but I fear this method name might be too long.

If the `equalsDescriptorString` on `Utf8Entry` is too inconvenient, a remedy 
may be to add `matches(String, ClassDesc)` or `matches(String, MethodTypeDesc)` 
to NameAndTypeEntry and/or MemberRefEntry.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/23548#discussion_r1951191457

Reply via email to