New constant API addition proposals for Classfile API

Remi Forax forax at univ-mlv.fr
Mon Mar 13 19:09:22 UTC 2023


As a data point, i've never used classData() directly from a condy, mostly because either 
- I had some other constraints to check, 
- the requirement that the name is "_" make it uneasy to read the generated bytecode, 
- classData() is called in the static block. 

regards, 
Rémi 

> From: "Brian Goetz" <brian.goetz at oracle.com>
> To: "-" <liangchenblue at gmail.com>, "classfile-api-dev"
> <classfile-api-dev at openjdk.org>
> Sent: Monday, March 13, 2023 6:54:23 PM
> Subject: Re: New constant API addition proposals for Classfile API

> (1) and (2) make total sense; (3) seems a little much, since it is just
> defaulting in a single argument?

> On 3/13/2023 1:49 PM, - wrote:

>> Hi,
>> After migrating 26/30 classes in test/jdk/java to Classfile API
>> ( [
>> https://github.com/liachmodded/jdk/commit/65ca55bc2e838823471de40f0e16f9770d932117
>> |
>> https://github.com/liachmodded/jdk/commit/65ca55bc2e838823471de40f0e16f9770d932117
>> ] ),
>> I suggest to add these new APIs to constant API for ease of Classfile
>> API usage:

>> 1. In ConstantDescs:
>>   public static final String CONSTRUCTOR_NAME = "<init>";
>>   public static final String CLASS_INITIALIZER_NAME = "<clinit>";
>>   public static final MethodTypeDesc MTD_void = MethodTypeDesc.of(CD_void);

>> Since every instance class always has a constructor, and most likely,
>> its constructor has to call Object's no-arg constructor. The same
>> method type descriptor is shared for the static initializer too.

>> 2. In ConstantDescs:
>>   public static final DirectMethodHandleDesc BSM_CLASS_DATA = ...
>>   public static final DirectMethodHandleDesc BSM_CLASS_DATA_AT = ...

>> Representing MethodHandles.classData and MethodHandles.classDataAt,
>> used by hidden classes frequently.

>> 3. In DynamicConstantDesc:
>>   public static DynamicConstantDesc ofTyped(DirectMethodHandleDesc
>> bootstrapMethod, ClassDesc constantType, ConstantDesc...
>> bootstrapArgs)

>> This is equivalent to calling ofNamed with ConstantDescs.DEFAULT_NAME,
>> useful for classData and classDataAt bootstrap methods.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/classfile-api-dev/attachments/20230313/126653b4/attachment.htm>


More information about the classfile-api-dev mailing list