From 31827d60e3f4891ae34dcb2a8318e5f00460735f Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Fri, 6 Jul 2012 18:43:22 +0200 Subject: [PATCH] prefer compilers from sdks attached to project (IDEA-88411) --- .../compiler/server/BuildManager.java | 47 +++++++++++-------- 1 file changed, 28 insertions(+), 19 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 9f26d69c5dc5..e963bc5e90e1 100644 --- a/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java +++ b/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java @@ -670,26 +670,30 @@ public class BuildManager implements ApplicationComponent{ private Process launchBuildProcess(Project project, final int port, final UUID sessionId) throws ExecutionException { // choosing sdk with which the build process should be run - final Sdk internalJdk = JavaAwareProjectJdkTableImpl.getInstanceEx().getInternalJdk(); - Sdk projectJdk = internalJdk; - final String versionString = projectJdk.getVersionString(); - JavaSdkVersion sdkVersion = versionString != null? ((JavaSdk)projectJdk.getSdkType()).getVersion(versionString) : null; - int sdkMinorVersion = getMinorVersion(versionString); - if (sdkVersion != null) { - final Set candidates = new HashSet(); - for (Module module : ModuleManager.getInstance(project).getModules()) { - final Sdk sdk = ModuleRootManager.getInstance(module).getSdk(); - if (sdk != null && sdk.getSdkType() instanceof JavaSdk) { - candidates.add(sdk); - } + Sdk projectJdk = null; + JavaSdkVersion sdkVersion = null; + int sdkMinorVersion = 0; + + final Set candidates = new HashSet(); + for (Module module : ModuleManager.getInstance(project).getModules()) { + final Sdk sdk = ModuleRootManager.getInstance(module).getSdk(); + if (sdk != null && sdk.getSdkType() instanceof JavaSdk) { + candidates.add(sdk); } - // now select the latest version from the sdks that are used in the project, but not older than the internal sdk version - for (Sdk candidate : candidates) { - final String vs = candidate.getVersionString(); - if (vs != null) { - final JavaSdkVersion candidateVersion = ((JavaSdk)candidate.getSdkType()).getVersion(vs); - if (candidateVersion != null) { - final int candidateMinorVersion = getMinorVersion(vs); + } + // now select the latest version from the sdks that are used in the project, but not older than the internal sdk version + for (Sdk candidate : candidates) { + final String vs = candidate.getVersionString(); + if (vs != null) { + final JavaSdkVersion candidateVersion = ((JavaSdk)candidate.getSdkType()).getVersion(vs); + if (candidateVersion != null) { + final int candidateMinorVersion = getMinorVersion(vs); + if (projectJdk == null) { + sdkVersion = candidateVersion; + sdkMinorVersion = candidateMinorVersion; + projectJdk = candidate; + } + else { final int result = candidateVersion.compareTo(sdkVersion); if (result > 0 || (result == 0 && candidateMinorVersion > sdkMinorVersion)) { sdkVersion = candidateVersion; @@ -701,6 +705,11 @@ public class BuildManager implements ApplicationComponent{ } } + final Sdk internalJdk = JavaAwareProjectJdkTableImpl.getInstanceEx().getInternalJdk(); + if (projectJdk == null || sdkVersion == null || !sdkVersion.isAtLeast(JavaSdkVersion.JDK_1_6)) { + projectJdk = internalJdk; + } + // validate tools.jar presence final File compilerPath; if (projectJdk.equals(internalJdk)) {