diff --git a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/ui/ExternalSystemJdkComboBox.java b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/ui/ExternalSystemJdkComboBox.java index 41b97ae9c85f..34d9e0b0b75a 100644 --- a/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/ui/ExternalSystemJdkComboBox.java +++ b/platform/external-system-impl/src/com/intellij/openapi/externalSystem/service/ui/ExternalSystemJdkComboBox.java @@ -18,10 +18,7 @@ package com.intellij.openapi.externalSystem.service.ui; import com.intellij.openapi.externalSystem.service.execution.ExternalSystemJdkUtil; import com.intellij.openapi.externalSystem.util.ExternalSystemBundle; import com.intellij.openapi.project.Project; -import com.intellij.openapi.projectRoots.JavaSdk; -import com.intellij.openapi.projectRoots.ProjectJdkTable; -import com.intellij.openapi.projectRoots.Sdk; -import com.intellij.openapi.projectRoots.SdkType; +import com.intellij.openapi.projectRoots.*; import com.intellij.openapi.projectRoots.impl.JavaAwareProjectJdkTableImpl; import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.roots.ui.util.CompositeAppearance; @@ -46,6 +43,7 @@ public class ExternalSystemJdkComboBox extends ComboBoxWithWidePopup { @Nullable private Project myProject; + private boolean suggestJre = true; public ExternalSystemJdkComboBox() { this(null); @@ -94,6 +92,11 @@ public class ExternalSystemJdkComboBox extends ComboBoxWithWidePopup { myProject = project; } + public ExternalSystemJdkComboBox withoutJre() { + suggestJre = false; + return this; + } + public void refreshData(@Nullable String selectedValue) { Map jdkMap = collectComboBoxItem(); if (selectedValue != null && !jdkMap.containsKey(selectedValue)) { @@ -140,16 +143,17 @@ public class ExternalSystemJdkComboBox extends ComboBoxWithWidePopup { result.put(name, new JdkComboBoxItem(name, name, comment, ((SdkType)projectJdk.getSdkType()).sdkHasValidPath(projectJdk))); } - final Sdk internalJdk = JavaAwareProjectJdkTableImpl.getInstanceEx().getInternalJdk(); - assert internalJdk.getHomePath() != null; - - result.put(ExternalSystemJdkUtil.USE_INTERNAL_JAVA, - new JdkComboBoxItem( - ExternalSystemJdkUtil.USE_INTERNAL_JAVA, - ExternalSystemBundle.message("external.system.java.internal.jre"), - buildComment(internalJdk), - true - )); + if(suggestJre) { + final Sdk internalJdk = JavaAwareProjectJdkTableImpl.getInstanceEx().getInternalJdk(); + assert internalJdk.getHomePath() != null; + result.put(ExternalSystemJdkUtil.USE_INTERNAL_JAVA, + new JdkComboBoxItem( + ExternalSystemJdkUtil.USE_INTERNAL_JAVA, + ExternalSystemBundle.message("external.system.java.internal.jre"), + buildComment(internalJdk), + true + )); + } if (myProject != null) { final Sdk projectSdk = ProjectRootManager.getInstance(myProject).getProjectSdk(); diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/GradleInstallationManager.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/GradleInstallationManager.java index c8b22f95cd8a..f51f8ee90bcc 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/GradleInstallationManager.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/GradleInstallationManager.java @@ -7,6 +7,7 @@ import com.intellij.openapi.externalSystem.service.project.PlatformFacade; import com.intellij.openapi.externalSystem.util.ExternalSystemConstants; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; +import com.intellij.openapi.projectRoots.JdkUtil; import com.intellij.openapi.projectRoots.Sdk; import com.intellij.openapi.roots.OrderEnumerator; import com.intellij.openapi.util.Ref; @@ -150,6 +151,14 @@ public class GradleInstallationManager { OpenExternalSystemSettingsCallback.ID), linkedProjectPath, null, OpenExternalSystemSettingsCallback.ID); } + + final File sdkHomePath = sdk != null && sdk.getHomePath() != null ? new File(sdk.getHomePath()) : null; + if (sdkHomePath != null && JdkUtil.checkForJre(sdkHomePath.getPath()) && !JdkUtil.checkForJdk(sdkHomePath)) { + throw new ExternalSystemJdkException( + String.format("Please, use JDK instead of JRE for Gradle importer. Open Gradle Settings \n", + OpenExternalSystemSettingsCallback.ID), + linkedProjectPath, null, OpenExternalSystemSettingsCallback.ID); + } return sdk; } diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/settings/GradleProjectSettingsControl.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/settings/GradleProjectSettingsControl.java index 93a60b86b80d..55257bd4eec4 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/settings/GradleProjectSettingsControl.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/settings/GradleProjectSettingsControl.java @@ -122,7 +122,7 @@ public class GradleProjectSettingsControl extends AbstractExternalProjectSetting myGradleHomeLabel = new JBLabel(GradleBundle.message("gradle.settings.text.home.path")); initGradleHome(); myGradleJdkLabel = new JBLabel(GradleBundle.message("gradle.settings.text.jvm.path")); - myGradleJdkComboBox = new ExternalSystemJdkComboBox(); + myGradleJdkComboBox = new ExternalSystemJdkComboBox().withoutJre(); initControls(); content.add(myUseWrapperButton, ExternalSystemUiUtil.getFillLineConstraints(indentLevel)); diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/settings/GradleProjectSettings.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/settings/GradleProjectSettings.java index 54ab8818e9b8..ecc1e2639e09 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/settings/GradleProjectSettings.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/settings/GradleProjectSettings.java @@ -27,7 +27,7 @@ import org.jetbrains.annotations.Nullable; public class GradleProjectSettings extends ExternalProjectSettings { @Nullable private String myGradleHome; - @Nullable private String myGradleJvm; + @Nullable private String myGradleJvm = ExternalSystemJdkUtil.USE_PROJECT_JDK;; @Nullable private DistributionType distributionType; private boolean disableWrapperSourceDistributionNotification;