On Fri, 5 May 2023 09:52:37 GMT, Jaikiran Pai <j...@openjdk.org> wrote:

>> Jim Laskey has updated the pull request incrementally with two additional 
>> commits since the last revision:
>> 
>>  - Anonymous main classes renamed to unnamed classes
>>  - Add test
>
> src/java.base/share/classes/sun/launcher/LauncherHelper.java line 872:
> 
>> 870:         Method mainMethod = null;
>> 871:         try {
>> 872:             mainMethod = MainMethodFinder.findMainMethod(mainClass);
> 
> The `MainMethodFinder.findMainMethod(...)` throws a `NoSuchMethodException` 
> when it can't find the regular `public static void main(String[])` or, when 
> preview is enabled, any other eligible main methods. That will now mean that 
> the next line here which catches a `NoSuchMethodException` can potentially 
> end up aborting with a (very confusing) error message about JavaFX 
> application. We should perhaps change that catch block to something like:
> 
> } catch (NoSuchMethodException nsme) {
>    if (!PreviewFeatures.isEnabled()) {
>                   // invalid main or not FX application, abort with an error
>             abort(null, "java.launcher.cls.error4", mainClass.getName(),
>                   JAVAFX_APPLICATION_CLASS_NAME);
>    } else {
>        // abort with something more clear error?
>    }

Not convinced that anything has changed or that the message is confusing.

> src/java.base/share/classes/sun/launcher/LauncherHelper.java line 893:
> 
>> 891:          * findMainMethod (above) will choose the correct method, based
>> 892:          * on its name and parameter type, however, we still have to
>> 893:          * ensure that the method is static (non-preview) and returns a 
>> void.
> 
> I think it's probably going to be easier to read and maintain if we moved 
> these checks for `static` and `void` return type into the 
> `MainMethodFinder.findMainMethod(...)` itself. 
> What I mean is once we return from the `findMainMethod(...)`, I think the 
> callers, like this code here, shouldn't have to do additional checks to know 
> if this main method is valid and can be used.

I agree, but from my early commentary we have to hold off until later.

> src/jdk.compiler/share/classes/com/sun/tools/javac/launcher/Main.java line 
> 419:
> 
>> 417:     private static boolean isStatic(Method method) {
>> 418:         return method != null && 
>> Modifier.isStatic(method.getModifiers());
>> 419:     }
> 
> It looks like these new methods aren't being used.

Remnants - removing

> src/jdk.compiler/share/classes/com/sun/tools/javac/launcher/Main.java line 
> 440:
> 
>> 438:             int mods = mainMethod.getModifiers();
>> 439:             boolean isStatic = Modifier.isStatic(mods);
>> 440:             boolean isPublic = Modifier.isStatic(mods);
> 
> This looks like a typo. This should have been `Modifier.isPublic(mods);`

Changing

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

PR Review Comment: https://git.openjdk.org/jdk/pull/13689#discussion_r1186258290
PR Review Comment: https://git.openjdk.org/jdk/pull/13689#discussion_r1186259446
PR Review Comment: https://git.openjdk.org/jdk/pull/13689#discussion_r1186261107
PR Review Comment: https://git.openjdk.org/jdk/pull/13689#discussion_r1186259830

Reply via email to