On 4/13/18 4:15 AM, Jonathan Gibbons wrote:
Please review an initial implementation for the feature described in
JEP 330: Launch Single-File Source-Code Programs.
The work is described in the JEP and CSR, and falls into various parts:
* The part to handle the new command-line options is in the native
Java launcher code.
* The part to invoke the compiler and subsequently execute the code
found in the source file is in a new class in the jdk.compiler module.
* There are some minor Makefile changes, to add support for a new
resource file.
There are no changes to javac itself.
JEP: http://openjdk.java.net/jeps/330
JBS: https://bugs.openjdk.java.net/browse/JDK-8201274
CSR: https://bugs.openjdk.java.net/browse/JDK-8201275
Webrev: http://cr.openjdk.java.net/~jjg/8201274/webrev.00/
This looks quite good to me. One small comment on the source launcher
Main class:
122 } catch (InvocationTargetException e) {
123 // leave VM to handle the stacktrace, in the standard manner
124 throw e.getTargetException();
125 }
387 } catch (InvocationTargetException e) {
388 // remove stack frames for source launcher
389 int invocationFrames = e.getStackTrace().length;
390 Throwable target = e.getTargetException();
391 StackTraceElement[] targetTrace = target.getStackTrace();
392 target.setStackTrace(Arrays.copyOfRange(targetTrace, 0,
targetTrace.length - invocationFrames));
393 throw e;
394 }
This could simply throw target instead of the InvocationTargetException
and then the main method can propagate the target, if thrown.
Mandy