On Thu, 15 May 2025 16:42:48 GMT, Jan Lahoda <jlah...@openjdk.org> wrote:

> A consider class like this:
> 
> 
> public class TwoMains {
>     private static void main(String... args) {}
>     static void main() {
>         System.out.println("Should be called, but is not.");
>     }
> }
> 
> 
> The `MethodFinder` will do lookup for the `main(String[])` method, and it 
> finds one, so does not proceed with a lookup for `main()`. But then, it will 
> check the access modifier, and will reject that method, never going back to 
> the `main()` method. This is not what the JLS says about the lookup - the 
> private method is not a candidate, and should be ignored.
> 
> Something similar happens if the return type is not `void`.
> 
> This PR is fixing that by checking whether the `main(String[])` method is 
> usable early, and falling back to `main()` if it `main(String[])` is not 
> usable.
> 
> It also removes the check for the `abstract` method, as that, by itself, is 
> not really backed by JLS, but adds a check for `abstract` class, producing a 
> user-friendly message is trying to invoke an instance `main` method on an 
> `abstract` class (which, obviously, cannot be instantiated).

test/langtools/tools/javac/launcher/SourceLauncherTest.java line 794:

> 792:                           """
> 793:                           public class WrongMainPrivate {
> 794:                               private static void main(String[] args) {}

Same comment as in the other place, perhaps we should include a `private void 
main(String[] args) {}` too?

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

PR Review Comment: https://git.openjdk.org/jdk/pull/25256#discussion_r2092789314

Reply via email to