Only include ecj compiler into jps classpath, if 'Eclipse' compiler was set in CompilerSettings (IDEA-163375)

This commit is contained in:
Eugene Zhuravlev
2016-11-03 22:19:26 +03:00
parent 5404c14a3b
commit e02cdfe54a
2 changed files with 23 additions and 14 deletions
@@ -17,8 +17,10 @@ package com.intellij.compiler.server;
import com.intellij.ProjectTopics;
import com.intellij.compiler.CompilerConfiguration;
import com.intellij.compiler.CompilerConfigurationImpl;
import com.intellij.compiler.CompilerWorkspaceConfiguration;
import com.intellij.compiler.impl.CompilerUtil;
import com.intellij.compiler.impl.javaCompiler.BackendCompiler;
import com.intellij.compiler.impl.javaCompiler.javac.JavacConfiguration;
import com.intellij.compiler.server.impl.BuildProcessClasspathManager;
import com.intellij.concurrency.JobScheduler;
@@ -104,10 +106,10 @@ import org.jetbrains.jps.cmdline.BuildMain;
import org.jetbrains.jps.cmdline.ClasspathBootstrap;
import org.jetbrains.jps.incremental.Utils;
import org.jetbrains.jps.model.java.JpsJavaSdkType;
import org.jetbrains.jps.model.java.compiler.JavaCompilers;
import org.jetbrains.jps.model.serialization.JpsGlobalLoader;
import javax.tools.JavaCompiler;
import javax.tools.ToolProvider;
import javax.tools.*;
import java.awt.*;
import java.io.File;
import java.io.IOException;
@@ -1180,13 +1182,13 @@ public class BuildManager implements Disposable {
launcherCp.add(ClasspathBootstrap.getResourcePath(launcherClass));
launcherCp.addAll(BuildProcessClasspathManager.getLauncherClasspath(project));
launcherCp.add(compilerPath);
ClasspathBootstrap.appendJavaCompilerClasspath(launcherCp);
ClasspathBootstrap.appendJavaCompilerClasspath(launcherCp, shouldIncludeEclipseCompiler(projectConfig));
cmdLine.addParameter("-classpath");
cmdLine.addParameter(classpathToString(launcherCp));
cmdLine.addParameter(launcherClass.getName());
final List<String> cp = ClasspathBootstrap.getBuildProcessApplicationClasspath(true);
final List<String> cp = ClasspathBootstrap.getBuildProcessApplicationClasspath();
cp.addAll(myClasspathManager.getBuildProcessPluginsClasspath(project));
if (isProfilingMode) {
cp.add(new File(workDirectory, "yjp-controller-api-redist.jar").getPath());
@@ -1238,6 +1240,15 @@ public class BuildManager implements Disposable {
return processHandler;
}
private boolean shouldIncludeEclipseCompiler(CompilerConfiguration config) {
if (config instanceof CompilerConfigurationImpl) {
final BackendCompiler javaCompiler = ((CompilerConfigurationImpl)config).getDefaultCompiler();
final String compilerId = javaCompiler != null? javaCompiler.getId() : null;
return JavaCompilers.ECLIPSE_ID.equals(compilerId) || JavaCompilers.ECLIPSE_EMBEDDED_ID.equals(compilerId);
}
return true;
}
public File getBuildSystemDirectory() {
return new File(mySystemDirectory, SYSTEM_ROOT);
}
@@ -125,7 +125,7 @@ public class ClasspathBootstrap {
private ClasspathBootstrap() {
}
public static List<String> getBuildProcessApplicationClasspath(boolean isLauncherUsed) {
public static List<String> getBuildProcessApplicationClasspath() {
final Set<String> cp = ContainerUtil.newHashSet();
cp.add(getResourcePath(BuildMain.class));
@@ -147,10 +147,6 @@ public class ClasspathBootstrap {
cp.addAll(getJavac8RefScannerClasspath());
//don't forget to update layoutCommunityJps() in layouts.gant accordingly
if (!isLauncherUsed) {
appendJavaCompilerClasspath(cp);
}
try {
final Class<?> cmdLineWrapper = Class.forName("com.intellij.rt.execution.CommandLineWrapper");
cp.add(getResourcePath(cmdLineWrapper)); // idea_rt.jar
@@ -161,15 +157,17 @@ public class ClasspathBootstrap {
return ContainerUtil.newArrayList(cp);
}
public static void appendJavaCompilerClasspath(Collection<String> cp) {
public static void appendJavaCompilerClasspath(Collection<String> cp, boolean includeEcj) {
final Class<StandardJavaFileManager> optimizedFileManagerClass = getOptimizedFileManagerClass();
if (optimizedFileManagerClass != null) {
cp.add(getResourcePath(optimizedFileManagerClass)); // optimizedFileManager
}
File file = EclipseCompilerTool.findEcjJarFile();
if (file != null) {
cp.add(file.getAbsolutePath());
if (includeEcj) {
File file = EclipseCompilerTool.findEcjJarFile();
if (file != null) {
cp.add(file.getAbsolutePath());
}
}
}