CPP-18581 fixed ignoring of custom sdk references

added using of ExternalSystemJdkProvider for Sdk creation

GitOrigin-RevId: d57f52c94dafac81037a599c66fa64790143f301
This commit is contained in:
Sergei Vorobyov
2020-01-16 08:11:51 +00:00
committed by intellij-monorepo-bot
parent 04dca5f126
commit 21e2acbaff
6 changed files with 30 additions and 22 deletions
@@ -82,10 +82,7 @@ public class ExternalSystemJdkUtil {
String javaHome = EnvironmentUtil.getEnvironmentMap().get("JAVA_HOME");
if (StringUtil.isEmptyOrSpaces(javaHome)) throw new UndefinedJavaHomeException();
if (!isValidJdk(javaHome)) throw new InvalidJavaHomeException(javaHome);
SimpleJavaSdkType sdkType = SimpleJavaSdkType.getInstance();
String sdkName = sdkType.suggestSdkName(null, javaHome);
return sdkType.createJdk(sdkName, javaHome);
return ExternalSystemJdkProvider.getInstance().createJdk(null, javaHome);
}
@Nullable
@@ -172,8 +169,7 @@ public class ExternalSystemJdkUtil {
@Contract("null -> false")
public static boolean isValidJdk(@Nullable Sdk jdk) {
if (jdk == null) return false;
SdkType javaSdkType = getJavaSdkType();
if (!javaSdkType.equals(jdk.getSdkType())) return false;
if (!(jdk.getSdkType() instanceof JavaSdkType)) return false;
if (SdkDownloadTracker.getInstance().isDownloading(jdk)) return true;
return isValidJdk(jdk.getHomePath());
}
@@ -3,8 +3,10 @@
package com.intellij.openapi.externalSystem.service.ui
import com.intellij.openapi.externalSystem.service.execution.ExternalSystemJdkException
import com.intellij.openapi.externalSystem.service.execution.ExternalSystemJdkUtil
import com.intellij.openapi.externalSystem.service.execution.InvalidSdkException
import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.projectRoots.impl.SdkConfigurationUtil
import com.intellij.openapi.roots.ui.configuration.SdkComboBox
import com.intellij.openapi.roots.ui.configuration.SdkListItem
@@ -27,12 +29,22 @@ fun SdkComboBox.setSelectedJdkReference(jdkReference: String?) {
private fun SdkComboBox.resolveSdkItem(selectedJdkReference: String): SdkListItem {
try {
val selectedJdk = ExternalSystemJdkUtil.resolveJdkName(model.sdksModel.projectSdk, selectedJdkReference)
val selectedSdkItem = selectedJdk?.let { model.listModel.findSdkItem(selectedJdk) }
if (selectedSdkItem == null) return showInvalidSdkItem(selectedJdkReference)
return selectedSdkItem
val selectedJdk = ExternalSystemJdkUtil.resolveJdkName(null, selectedJdkReference)
if (selectedJdk == null) return showInvalidSdkItem(selectedJdkReference)
return findSdkItem(selectedJdk) ?: addAndGetSdkItem(selectedJdk)
}
catch (ex: InvalidSdkException) {
catch (ex: ExternalSystemJdkException) {
return showInvalidSdkItem(selectedJdkReference)
}
}
private fun SdkComboBox.addAndGetSdkItem(sdk: Sdk): SdkListItem {
SdkConfigurationUtil.addSdk(sdk)
model.sdksModel.addSdk(sdk)
reloadModel()
return findSdkItem(sdk) ?: showInvalidSdkItem(sdk.name)
}
private fun SdkComboBox.findSdkItem(sdk: Sdk): SdkListItem? {
return model.listModel.findSdkItem(sdk)
}
@@ -37,7 +37,7 @@ public abstract class SdkComboBoxBase<T> extends ComboBox<T> {
}
@NotNull
public SdkListItem showInvalidSdkItem(String name) {
public SdkListItem showInvalidSdkItem(@NotNull String name) {
return myModel.showInvalidSdkItem(name);
}
@@ -166,7 +166,7 @@ public final class SdkListModelBuilder {
}
@NotNull
public SdkListItem showInvalidSdkItem(String name) {
public SdkListItem showInvalidSdkItem(@NotNull String name) {
InvalidSdkItem invalidItem = new InvalidSdkItem(name);
if (Objects.equals(myInvalidItem, invalidItem)) return myInvalidItem;
myInvalidItem = invalidItem;
@@ -20,7 +20,6 @@ import com.intellij.openapi.externalSystem.util.ExternalSystemUtil
import com.intellij.openapi.project.Project
import com.intellij.openapi.projectRoots.ProjectJdkTable
import com.intellij.openapi.projectRoots.Sdk
import com.intellij.openapi.projectRoots.SimpleJavaSdkType
import com.intellij.openapi.roots.ProjectRootManager
import com.intellij.openapi.util.Disposer
import com.intellij.openapi.util.io.FileUtil
@@ -126,10 +125,7 @@ internal class GradleOpenProjectProvider : AbstractOpenProjectProvider() {
val javaHome = EnvironmentUtil.getEnvironmentMap()["JAVA_HOME"] ?: return null
val jdk = GradleJdk.valueOf(javaHome) ?: return null
if (!jdk.isSupported(gradleVersion)) return null
val simpleJavaSdkType = SimpleJavaSdkType.getInstance()
val sdkName = simpleJavaSdkType.suggestSdkName(null, javaHome)
simpleJavaSdkType.createJdk(sdkName, javaHome)
return ExternalSystemJdkUtil.USE_JAVA_HOME
return ExternalSystemJdkUtil.addJdk(javaHome).name
}
private fun SettingsContext.getProjectJdkReference(): String? {
@@ -609,9 +609,13 @@ public class IdeaGradleProjectSettingsControlBuilder implements GradleProjectSet
return true;
}
if (myGradleJdkComboBox != null &&
!StringUtil.equals(getSelectedJdkReference(myGradleJdkComboBox), myInitialSettings.getGradleJvm())) {
return true;
if (myGradleJdkComboBox != null) {
if (!StringUtil.equals(getSelectedJdkReference(myGradleJdkComboBox), myInitialSettings.getGradleJvm())) {
return true;
}
if (myGradleJdkComboBox.getModel().getSdksModel().isModified()) {
return true;
}
}
if (myGradleHomePathField == null) return false;