RFR: 8304139: Add <init>, <clinit>, and main method constants to ClassDescs

Mandy Chung mchung at openjdk.org
Thu Mar 16 20:52:33 UTC 2023


On Tue, 14 Mar 2023 14:30:32 GMT, Chen Liang <liach at openjdk.org> wrote:

> Add String constants INIT_NAME, CLASS_INIT_NAME, MTD_void for the names and method type of instance and class initializers; add String constant MAIN_NAME and MTD_void_StringArray for the name and method type of main method.
> 
> Update occurrences of <init> and <clinit> in core libraries API specification to refer to these constants. The occurrences in code elsewhere will be converted separately for there are too many.
> 
> See https://mail.openjdk.org/pipermail/classfile-api-dev/2023-March/000233.html

src/java.base/share/classes/java/lang/constant/ConstantDescs.java line 288:

> 286:     /**
> 287:      * The special name of instance initialization methods, {@value}. They
> 288:      * typically correspond to constructors.

What about this to describe the signature:

Suggestion:

     * The special name of instance initialization methods, {@value}.   An instance
     *  initialization method has this special name and is {@code void}.

src/java.base/share/classes/java/lang/constant/ConstantDescs.java line 297:

> 295:     /**
> 296:      * The special name of class initialization methods, {@value}. They
> 297:      * typically correspond to static initializers.

Suggestion:

     * The special name of class initialization methods, {@value}.  A class 
     * initialization method has this special name, {@link AccessFlag#STATIC 
     * ACC_STATIC} flag set and is {@link #MTD_void void} taking no arguments.

src/java.base/share/classes/java/lang/constant/ConstantDescs.java line 315:

> 313:      * @since 21
> 314:      */
> 315:     public static final MethodTypeDesc MTD_void = MethodTypeDesc.of(CD_void);

This is a generic method type descriptor and not restrict to initialization methods.   So I think no need to mention that "This is the method type of initialization methods ..." and  `@jvms, @see and @jls" references.

Maybe it can be as simple as:



Nominal descriptor representing the method descriptor {@code ()V},
taking no argument and returning {@code void}.

src/java.base/share/classes/java/lang/constant/ConstantDescs.java line 326:

> 324:      * @since 21
> 325:      */
> 326:     public static final String MAIN_NAME = "main";

I'm not sure if predefined constants for "main" and its method type descriptor are highly needed.

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

PR: https://git.openjdk.org/jdk/pull/13020


More information about the core-libs-dev mailing list