if eclipse compiler is used in the project, require at least java7 for build process running (IDEA-154110)

This commit is contained in:
Eugene Zhuravlev
2016-04-04 14:18:21 +02:00
parent 75476a7c77
commit 4142ca0e32
@@ -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;
@@ -98,6 +100,7 @@ import org.jetbrains.jps.api.*;
import org.jetbrains.jps.cmdline.BuildMain;
import org.jetbrains.jps.cmdline.ClasspathBootstrap;
import org.jetbrains.jps.incremental.Utils;
import org.jetbrains.jps.model.java.compiler.JavaCompilers;
import org.jetbrains.jps.model.serialization.JpsGlobalLoader;
import javax.tools.*;
@@ -944,14 +947,26 @@ public class BuildManager implements Disposable {
}
}
final Sdk internalJdk = JavaAwareProjectJdkTableImpl.getInstanceEx().getInternalJdk();
if (projectJdk == null || sdkVersion == null || !sdkVersion.isAtLeast(JavaSdkVersion.JDK_1_6)) {
final JavaSdkVersion oldestPossible = getOldestPossiblePlatformForBuildProcess(project);
if (projectJdk == null || sdkVersion == null || !sdkVersion.isAtLeast(oldestPossible)) {
final Sdk internalJdk = JavaAwareProjectJdkTableImpl.getInstanceEx().getInternalJdk();
projectJdk = internalJdk;
sdkVersion = javaSdkType.getVersion(internalJdk);
}
return Pair.create(projectJdk, sdkVersion);
}
@NotNull
private static JavaSdkVersion getOldestPossiblePlatformForBuildProcess(Project project) {
final BackendCompiler javaCompiler = ((CompilerConfigurationImpl)CompilerConfiguration.getInstance(project)).getDefaultCompiler();
final String id = javaCompiler != null? javaCompiler.getId() : JavaCompilers.JAVAC_ID;
if (id == JavaCompilers.ECLIPSE_ID || id == JavaCompilers.ECLIPSE_EMBEDDED_ID) {
return JavaSdkVersion.JDK_1_7; // because bundled ecj is compiled against 1.7
}
return JavaSdkVersion.JDK_1_6;
}
private Future<Pair<RequestFuture<PreloadedProcessMessageHandler>, OSProcessHandler>> launchPreloadedBuildProcess(final Project project, ExecutorService projectTaskQueue) throws Exception {
ensureListening();