From 05050b64e7648cfbab999d8d2fc7c72eee477de5 Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Fri, 27 Jan 2012 20:19:06 +0100 Subject: [PATCH] compile server: honor javac vm additional params --- .../jps/incremental/java/JavaBuilder.java | 38 +++++++++++++++++-- .../jps/javac/JavacServerBootstrap.java | 10 ++++- 2 files changed, 44 insertions(+), 4 deletions(-) diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java index 13544a88a868..2d1436612939 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java @@ -332,7 +332,9 @@ public class JavaBuilder extends ModuleLevelBuilder { final int port = findFreePort(); final int heapSize = getJavacServerHeapSize(context); - final BaseOSProcessHandler processHandler = JavacServerBootstrap.launchJavacServer(vmExecPath, heapSize, port, Paths.getSystemRoot()); + final BaseOSProcessHandler processHandler = JavacServerBootstrap.launchJavacServer( + vmExecPath, heapSize, port, Paths.getSystemRoot(), getCompilationVMOptions(context) + ); final JavacServerClient client = new JavacServerClient(); try { client.connect(hostString, port); @@ -401,8 +403,31 @@ public class JavaBuilder extends ModuleLevelBuilder { return new CompiledClassesLoader(outputSink, urls.toArray(new URL[urls.size()])); } + private static final Key> JAVAC_OPTIONS = Key.create("_javac_options_"); + private static final Key> JAVAC_VM_OPTIONS = Key.create("_javac_vm_options_"); + + private static List getCompilationVMOptions(CompileContext context) { + List cached = JAVAC_VM_OPTIONS.get(context); + if (cached == null) { + loadJavacOptions(context); + cached = JAVAC_VM_OPTIONS.get(context); + } + return cached; + } + private static List getCompilationOptions(CompileContext context) { + List cached = JAVAC_OPTIONS.get(context); + if (cached == null) { + loadJavacOptions(context); + cached = JAVAC_OPTIONS.get(context); + } + return cached; + } + + private static void loadJavacOptions(CompileContext context) { final List options = new ArrayList(); + final List vmOptions = new ArrayList(); + options.add("-verbose"); final Project project = context.getProject(); @@ -429,7 +454,12 @@ public class JavaBuilder extends ModuleLevelBuilder { if ("-g".equals(token) || "-deprecation".equals(token) || "-nowarn".equals(token) || "-verbose".equals(token)){ continue; } - options.add(token); + if (token.startsWith("-J-")) { + vmOptions.add(token.substring("-J".length())); + } + else { + options.add(token); + } if ("-encoding".equals(token)) { isEncodingSet = true; } @@ -440,7 +470,9 @@ public class JavaBuilder extends ModuleLevelBuilder { options.add("-encoding"); options.add(project.getProjectCharset()); } - return options; + + JAVAC_OPTIONS.set(context, options); + JAVAC_VM_OPTIONS.set(context, vmOptions); } private static Map> buildOutputDirectoriesMap(CompileContext context, ModuleChunk chunk) { diff --git a/jps/jps-builders/src/org/jetbrains/jps/javac/JavacServerBootstrap.java b/jps/jps-builders/src/org/jetbrains/jps/javac/JavacServerBootstrap.java index c01a5c121af8..cdd778e32ff1 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/javac/JavacServerBootstrap.java +++ b/jps/jps-builders/src/org/jetbrains/jps/javac/JavacServerBootstrap.java @@ -22,7 +22,11 @@ import java.util.List; */ public class JavacServerBootstrap { - public static BaseOSProcessHandler launchJavacServer(String vmExecutablePath, int heapSize, int port, File workingDir) throws Exception { + public static BaseOSProcessHandler launchJavacServer(String vmExecutablePath, + int heapSize, + int port, + File workingDir, + List vmOptions) throws Exception { final List cmdLine = new ArrayList(); appendParam(cmdLine, vmExecutablePath); @@ -54,6 +58,10 @@ public class JavacServerBootstrap { appendParam(cmdLine, "-Duser.region=" + region); } + for (String option : vmOptions) { + appendParam(cmdLine, option); + } + appendParam(cmdLine, "-classpath"); final List cp = ClasspathBootstrap.getJavacServerClasspath();