On Sun, 19 Nov 2023 20:14:10 GMT, Jim Laskey <jlas...@openjdk.org> wrote:

>> Address changes from JEP 445 to JEP 463.
>> 
>> - Move from a SYNTHETIC unnamed class to a MANDATED implicit class.
>> 
>> - Don't mark class on read.
>> 
>> - Remove reflection and annotation processing related to unnamed classes.
>> 
>> - Simplify main method search.
>
> Jim Laskey has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   Additional tests for getMainMethod

src/java.base/share/classes/java/lang/Class.java line 4839:

> 4837:     @PreviewFeature(feature=PreviewFeature.Feature.IMPLICIT_CLASSES)
> 4838:     @CallerSensitive
> 4839:     public Method getMainMethod() {

This is a new addition in the last few days. It's somewhat surprising as the  
launch protocol has never really surfaced in the API, there's nothing to 
identify the main class for example. I'm in two minds on surfacing this but it 
does make the java launcher code much simpler.

Class.getMethod/getMethods return public methods, the proposed getMainMethod 
may return a public or non-public method and may walk the class hierarchy. So 
I'm not sure about the naming, it feels more like a findMainMethod to emphasize 
the search or just mainMethod.

The javadoc probably needs to be fleshed out a bit more to specify how the main 
method is found.  It currently says "be declared this class's hierarchy" (typo) 
but it has to say more and make it clear that it may return a Method with a 
declared class that may be a superclass.

"(@jls 8.4.2)", I assume that should be "{@jls 8.4.2}".

The return description says "the candidate main method". This begs the question 
if there are other candidates, how do I find them?

The SM permission check looks right, it has to be the same as getDeclaredMethod.

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

PR Review Comment: https://git.openjdk.org/jdk/pull/16461#discussion_r1399233970

Reply via email to