From db6295f8a2ae80a0fbe17e8a25ddf623e3c5b457 Mon Sep 17 00:00:00 2001 From: Jonathan Gibbons Date: Wed, 26 Sep 2018 16:23:31 -0700 Subject: [PATCH] 8209963: source file mode for JVM should provide a hook to locate the source file Reviewed-by: darcy --- .../com/sun/tools/javac/launcher/Main.java | 1 + .../tools/javac/launcher/SourceLauncherTest.java | 16 ++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/jdk.compiler/share/classes/com/sun/tools/javac/launcher/Main.java b/src/jdk.compiler/share/classes/com/sun/tools/javac/launcher/Main.java index d74bd37a6dc..7b60e2ffa08 100644 --- a/src/jdk.compiler/share/classes/com/sun/tools/javac/launcher/Main.java +++ b/src/jdk.compiler/share/classes/com/sun/tools/javac/launcher/Main.java @@ -399,6 +399,7 @@ public class Main { */ private void execute(String mainClassName, String[] appArgs, Context context) throws Fault, InvocationTargetException { + System.setProperty("jdk.launcher.sourcefile", context.file.toString()); ClassLoader cl = context.getClassLoader(ClassLoader.getSystemClassLoader()); try { Class appClass = Class.forName(mainClassName, true, cl); diff --git a/test/langtools/tools/javac/launcher/SourceLauncherTest.java b/test/langtools/tools/javac/launcher/SourceLauncherTest.java index 2adb4f2df11..020bff10c61 100644 --- a/test/langtools/tools/javac/launcher/SourceLauncherTest.java +++ b/test/langtools/tools/javac/launcher/SourceLauncherTest.java @@ -250,6 +250,22 @@ public class SourceLauncherTest extends TestRunner { "access denied (\"java.util.PropertyPermission\" \"user.dir\" \"write\")"); } + public void testSystemProperty(Path base) throws IOException { + tb.writeJavaFiles(base, + "class ShowProperty {\n" + + " public static void main(String... args) {\n" + + " System.out.println(System.getProperty(\"jdk.launcher.sourcefile\"));\n" + + " }\n" + + "}"); + + Path file = base.resolve("ShowProperty.java"); + String log = new JavaTask(tb) + .className(file.toString()) + .run(Task.Expect.SUCCESS) + .getOutput(Task.OutputKind.STDOUT); + checkEqual("stdout", log.trim(), file.toAbsolutePath().toString()); + } + void testSuccess(Path file, String expect) throws IOException { Result r = run(file, Collections.emptyList(), List.of("1", "2", "3")); checkEqual("stdout", r.stdOut, expect);