From 4142ca0e3299ac305f5a1295044681b0bf29aa06 Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Mon, 4 Apr 2016 14:17:14 +0200 Subject: [PATCH] if eclipse compiler is used in the project, require at least java7 for build process running (IDEA-154110) --- .../compiler/server/BuildManager.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java b/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java index 7e9486d771c0..fc46ad254843 100644 --- a/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java +++ b/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java @@ -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, OSProcessHandler>> launchPreloadedBuildProcess(final Project project, ExecutorService projectTaskQueue) throws Exception { ensureListening();