diff --git a/jps/jps-builders/src/org/jetbrains/jps/cmdline/ClasspathBootstrap.java b/jps/jps-builders/src/org/jetbrains/jps/cmdline/ClasspathBootstrap.java index 034e85120859..6b9fef1d9e8f 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/cmdline/ClasspathBootstrap.java +++ b/jps/jps-builders/src/org/jetbrains/jps/cmdline/ClasspathBootstrap.java @@ -131,7 +131,7 @@ public class ClasspathBootstrap { return ContainerUtil.newArrayList(cp); } - public static List getJavacServerClasspath(String sdkHome) { + public static List getJavacServerClasspath(String sdkHome, boolean useEclipseCompiler) { final Set cp = new LinkedHashSet(); cp.add(getResourceFile(JavacServer.class)); // self // util @@ -190,6 +190,17 @@ public class ClasspathBootstrap { } } + if (useEclipseCompiler) { + // eclipse compiler + for (JavaCompiler javaCompiler : ServiceLoader.load(JavaCompiler.class)) { // Eclipse compiler + final File compilerResource = getResourceFile(javaCompiler.getClass()); + final String name = compilerResource.getName(); + if (name.startsWith("ecj-") && name.endsWith(".jar")) { + cp.add(compilerResource); + } + } + } + final Class transformerClass = JavaSourceTransformer.class; final ServiceLoader loader = ServiceLoader.load(transformerClass, transformerClass.getClassLoader()); for (JavaSourceTransformer t : loader) { 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 ad2ba8d03b8e..97ea01db976b 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 @@ -378,9 +378,6 @@ public class JavaBuilder extends ModuleLevelBuilder { } private static boolean useEclipseCompiler(CompileContext context) { - if (!USE_EMBEDDED_JAVAC) { - return false; - } JpsProject project = context.getProjectDescriptor().getProject(); final JpsJavaCompilerConfiguration configuration = JpsJavaExtensionService.getInstance().getCompilerConfiguration(project); final String compilerId = configuration != null? configuration.getJavaCompilerId() : null; @@ -418,7 +415,7 @@ public class JavaBuilder extends ModuleLevelBuilder { final String javaHome = SystemProperties.getJavaHome(); final BaseOSProcessHandler processHandler = JavacServerBootstrap.launchJavacServer( - javaHome, heapSize, port, Utils.getSystemRoot(), getCompilationVMOptions(context) + javaHome, heapSize, port, Utils.getSystemRoot(), getCompilationVMOptions(context), useEclipseCompiler(context) ); final JavacServerClient client = new JavacServerClient(); try { diff --git a/jps/jps-builders/src/org/jetbrains/jps/javac/JavacServer.java b/jps/jps-builders/src/org/jetbrains/jps/javac/JavacServer.java index de7d2a4577c0..359e151fd333 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/javac/JavacServer.java +++ b/jps/jps-builders/src/org/jetbrains/jps/javac/JavacServer.java @@ -42,6 +42,7 @@ public class JavacServer { public static final int DEFAULT_SERVER_PORT = 7878; public static final String SERVER_SUCCESS_START_MESSAGE = "Javac server started successfully. Listening on port: "; public static final String SERVER_ERROR_START_MESSAGE = "Error starting Javac Server: "; + public static final String USE_ECLIPSE_COMPILER_PROPERTY = "use.eclipse.compiler"; private final ChannelGroup myAllOpenChannels = new DefaultChannelGroup("javac-server"); private final ChannelFactory myChannelFactory; @@ -149,7 +150,7 @@ public class JavacServer { }; try { - final boolean rc = JavacMain.compile(options, files, classpath, platformCp, sourcePath, outs, diagnostic, outputSink, canceledStatus, false); + final boolean rc = JavacMain.compile(options, files, classpath, platformCp, sourcePath, outs, diagnostic, outputSink, canceledStatus, System.getProperty(USE_ECLIPSE_COMPILER_PROPERTY) != null); return JavacProtoUtil.toMessage(sessionId, JavacProtoUtil.createBuildCompletedResponse(rc)); } catch (Throwable e) { 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 05a33b5ae65a..97093800f7bf 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/javac/JavacServerBootstrap.java +++ b/jps/jps-builders/src/org/jetbrains/jps/javac/JavacServerBootstrap.java @@ -39,7 +39,12 @@ import java.util.concurrent.Future; */ public class JavacServerBootstrap { - public static BaseOSProcessHandler launchJavacServer(String sdkHomePath, int heapSize, int port, File workingDir, List vmOptions) throws Exception { + public static BaseOSProcessHandler launchJavacServer(String sdkHomePath, + int heapSize, + int port, + File workingDir, + List vmOptions, + boolean useEclipseCompiler) throws Exception { final List cmdLine = new ArrayList(); appendParam(cmdLine, getVMExecutablePath(sdkHomePath)); appendParam(cmdLine, "-XX:MaxPermSize=150m"); @@ -77,13 +82,17 @@ public class JavacServerBootstrap { appendParam(cmdLine, "-Duser.region=" + region); } + if (useEclipseCompiler) { + appendParam(cmdLine, "-D" + JavacServer.USE_ECLIPSE_COMPILER_PROPERTY); + } + for (String option : vmOptions) { appendParam(cmdLine, option); } appendParam(cmdLine, "-classpath"); - final List cp = ClasspathBootstrap.getJavacServerClasspath(sdkHomePath); + final List cp = ClasspathBootstrap.getJavacServerClasspath(sdkHomePath, useEclipseCompiler); final StringBuilder classpath = new StringBuilder(); for (File file : cp) { if (classpath.length() > 0) {