RFR: 8306914: Implementation of JEP Launch Multi-File Source-Code Programs [v3]

Christian Stein cstein at openjdk.org
Wed Oct 25 10:50:28 UTC 2023

> Please review this change set implementing [JEP 458](https://openjdk.org/jeps/458) "Launch Multi-File Source-Code Programs" by introducing a new entry-point `SourceLauncher` in package `com.sun.tools.javac.launcher` of module `jdk.compiler`. The former `Main` entry-point is kept as-is in order to preserve (and possibly fall back to) existing behaviour of launching single-file source-code programs.
> The code of the new entry-point and other new classes introduced by this pull request is based on the original implementation. It extends it to dynamically resolve required types "on-the-fly" using an in-memory class loader capable to compile Java source files - applying a strict name-based pattern as described in the JEP.
> To support modular programs with user-provided additional modules (launched for example via `java -p . pkg/Prog1.java`) `ALL-MODULE-PATH` is now also part of the implicit list of modules name in source launch mode.
> ### Open Ends
> - [ ] Tests with [JEP ?: Implicitly Declared Classes and Instance Main Method (2nd Preview)](https://bugs.openjdk.org/browse/JDK-8315398)
> ### OpenJDK's Demo Programs
> OpenJDK's demo programs can be found in the [src/demo/share/jfc](https://github.com/openjdk/jdk/tree/master/src/demo/share/jfc) directory. These multi-file source-code programs can be launched via `java ${PROGRAM}` once this implementation is integrated; with `${PROGRAM}` being one of the following files:
> - [x] `src/demo/share/jfc/CodePointIM/CodePointIM.java`
> - [x] `src/demo/share/jfc/FileChooserDemo/FileChooserDemo.java`
> - [x] `src/demo/share/jfc/Font2DTest/Font2DTest.java`
> - [x] `src/demo/share/jfc/J2Ddemo/java2d/J2Ddemo.java`
> - [x] `src/demo/share/jfc/Metalworks/Metalworks.java`
> - [x] `src/demo/share/jfc/Notepad/Notepad.java`
> - [x] `src/demo/share/jfc/SampleTree/SampleTree.java`
> - [ ] `src/demo/share/jfc/Stylepad/Stylepad.java` — requires `src/demo/share/jfc/Notepad/Notepad.java`
> - [x] `src/demo/share/jfc/SwingSet2/SwingSet2.java`
> - [ ] `src/demo/share/jfc/TableExample/TableExample.java` — requires a database driver on the class path
> - [ ] `src/demo/share/jfc/TableExample/TableExample2.java` —  requires a database driver on the class path
> - [x] `src/demo/share/jfc/TableExample/TableExample3.java`
> - [x] `src/demo/share/jfc/TableExample/TableExample4.java`
> - [x] `src/demo/share/jfc/TransparentRuler/transparentruler/Ruler.java`

Christian Stein has updated the pull request incrementally with one additional commit since the last revision:

  Add support for launching a public class
  If the first class declared in the initial file
  does not have a main entry point, check if the
  file has a public top-level class with a name
  matching the name of the file and with a main
  entry point. If there is one, invoke the main
  entry point of that class, otherwise fail.


  - all: https://git.openjdk.org/jdk/pull/13712/files
  - new: https://git.openjdk.org/jdk/pull/13712/files/093ab1ce..f96772c9

 - full: https://webrevs.openjdk.org/?repo=jdk&pr=13712&range=02
 - incr: https://webrevs.openjdk.org/?repo=jdk&pr=13712&range=01-02

  Stats: 74 lines in 3 files changed: 46 ins; 8 del; 20 mod
  Patch: https://git.openjdk.org/jdk/pull/13712.diff
  Fetch: git fetch https://git.openjdk.org/jdk.git pull/13712/head:pull/13712

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

More information about the compiler-dev mailing list