RFR: JDK-8306112 Implementation of JEP 445: Unnamed Classes and Instance Main Methods (Preview) [v8]

Jaikiran Pai jpai at openjdk.org
Fri May 5 09:42:23 UTC 2023


On Mon, 1 May 2023 13:06:24 GMT, Jim Laskey <jlaskey at openjdk.org> wrote:

>> Add flexible main methods and anonymous main classes to the Java language.
>
> 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/jdk/internal/misc/MainMethodFinder.java line 152:

> 150: 
> 151:             List<Method> mains = new ArrayList<>();
> 152:             gatherMains(mainClass, mainClass, mains);

The `try` block above is there to find `public static void main(String[])` in the launched class. When it's not found, then we gather the potential main methods (as listed in the JEP). The implementation of `gatherMains(...)`, in its current form starts gathering the main methods from `refc.getSuperclass()`, where `refc` in this case is the `mainClass`, which is the launched class.

So if I'm reading this correctly, then I think it's going to completely skip the launched class for looking any potential main methods and instead start looking for them in the launched class' super hierarchy.

src/java.base/share/classes/jdk/internal/misc/MainMethodFinder.java line 158:

> 156:             }
> 157: 
> 158:             mains.sort(MainMethodFinder::compareMethods);

Perhaps skip the call to `sort` and just return the found main method if `mains.size() == 1`?

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

PR Review Comment: https://git.openjdk.org/jdk/pull/13689#discussion_r1185890136
PR Review Comment: https://git.openjdk.org/jdk/pull/13689#discussion_r1185892782


More information about the core-libs-dev mailing list