RFR: 8339260: Move rarely used constants out of ClassFile [v9]
Chen Liang
liach at openjdk.org
Wed Oct 2 20:27:41 UTC 2024
On Wed, 2 Oct 2024 19:16:08 GMT, Luca Kellermann <duke at openjdk.org> wrote:
>> Chen Liang has updated the pull request incrementally with one additional commit since the last revision:
>>
>> AbstractPoolEntry is broken too
>
> src/java.base/share/classes/java/lang/classfile/AnnotationValue.java line 482:
>
>> 480: * describe the possible return values of this method.
>> 481: */
>> 482: char tag();
>
> Why is the type of the constants different from the return type of this function?
First, some bit of history. These API methods are added before those constants, and this patch did not change the type of these methods or constants.
I believe the methods have restricted return types to be informative: `tag()` is a U1, but it can be interpreted as a char (see [JVMS 4.7.16.1](https://docs.oracle.com/javase/specs/jvms/se23/html/jvms-4.html#jvms-4.7.16.1)) and thus is returned as one. CP tag is a U1 too (see [JVMS 4.4](https://docs.oracle.com/javase/specs/jvms/se23/html/jvms-4.html#jvms-4.7.16.1)) so maybe `byte` is just used out of convenience.
However, we usually use `int` to represent U1, also called unsigned bytes. See [`DataInput::readUnsignedByte`](https://github.com/openjdk/jdk/blob/c43202baf6eb7e49ec458037971a9efa392d053e/src/java.base/share/classes/java/io/DataInput.java#L323) and [`ClassReader::readU1`](https://github.com/openjdk/jdk/blob/c43202baf6eb7e49ec458037971a9efa392d053e/src/java.base/share/classes/java/lang/classfile/ClassReader.java#L133). Guess that's why we used `int` for the constants. (Also, note that byte and char are all [erased to int](https://download.java.net/java/early_access/jdk24/docs/api/java.base/java/lang/classfile/TypeKind.html#computational-type) in bytecode, so this has little practical effect and that might be why I didn't bother to change these)
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/20773#discussion_r1785208822
More information about the core-libs-dev
mailing list