IDEA-CR-56535 fixed wrong messages for gradle.jvm.is.jre

added jdk validation of gradle jvm

GitOrigin-RevId: f5555495fc330aa2098ff37ade3c95fce632f3d0
This commit is contained in:
Sergei Vorobyov
2019-12-23 15:07:19 +00:00
committed by intellij-monorepo-bot
parent 7241efd7de
commit 40b87ad449
9 changed files with 50 additions and 23 deletions
@@ -172,6 +172,8 @@ 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 (SdkDownloadTracker.getInstance().isDownloading(jdk)) return true;
return isValidJdk(jdk.getHomePath());
}
@@ -4,6 +4,7 @@
package com.intellij.openapi.externalSystem.service.ui
import com.intellij.openapi.externalSystem.service.execution.ExternalSystemJdkUtil
import com.intellij.openapi.externalSystem.service.execution.InvalidSdkException
import com.intellij.openapi.roots.ui.configuration.SdkComboBox
import com.intellij.openapi.roots.ui.configuration.SdkListItem
@@ -11,6 +12,7 @@ fun SdkComboBox.getSelectedJdkReference(): String? {
return when (val it = selectedItem) {
is SdkListItem.ProjectSdkItem -> ExternalSystemJdkUtil.USE_PROJECT_JDK
is SdkListItem.SdkItem -> it.sdk.name
is SdkListItem.InvalidSdkItem -> it.sdkName
else -> null
}
}
@@ -24,8 +26,13 @@ fun SdkComboBox.setSelectedJdkReference(jdkReference: String?) {
}
private fun SdkComboBox.resolveSdkItem(selectedJdkReference: String): SdkListItem {
val selectedJdk = ExternalSystemJdkUtil.resolveJdkName(model.sdksModel.projectSdk, selectedJdkReference)
val selectedSdkItem = selectedJdk?.let { model.listModel.findSdkItem(selectedJdk) }
if (selectedSdkItem == null) return showInvalidSdkItem(selectedJdkReference)
return selectedSdkItem
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
}
catch (ex: InvalidSdkException) {
return showInvalidSdkItem(selectedJdkReference)
}
}
@@ -6,6 +6,7 @@ import com.intellij.openapi.projectRoots.*
import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectSdksModel
import com.intellij.openapi.ui.ComboBoxPopupState
import com.intellij.openapi.util.Condition
import java.util.function.Predicate
import javax.swing.ComboBoxModel
import javax.swing.ListModel
@@ -36,12 +37,15 @@ class SdkComboBoxModel private constructor(
fun createSdkComboBoxModel(
project: Project,
sdksModel: ProjectSdksModel,
sdkTypeFilter: Condition<SdkTypeId>? = null,
sdkTypeCreationFilter: Condition<SdkTypeId>? = null,
sdkFilter: Condition<Sdk>? = null
sdkTypeFilter: Predicate<SdkTypeId>? = null,
sdkTypeCreationFilter: Predicate<SdkTypeId>? = null,
sdkFilter: Predicate<Sdk>? = null
): SdkComboBoxModel {
val selectedItem = SdkListItem.NoneSdkItem()
val modelBuilder = SdkListModelBuilder(project, sdksModel, sdkTypeFilter, sdkTypeCreationFilter, sdkFilter)
val sdkTypeCondition = sdkTypeFilter?.let { f -> Condition<SdkTypeId> { f.test(it) } }
val sdkTypeCreationCondition = sdkTypeCreationFilter?.let { f -> Condition<SdkTypeId> { f.test(it) } }
val sdkCondition = sdkFilter?.let { f -> Condition<Sdk> { f.test(it) } }
val modelBuilder = SdkListModelBuilder(project, sdksModel, sdkTypeCondition, sdkTypeCreationCondition, sdkCondition)
if (sdksModel.projectSdk != null) modelBuilder.showProjectSdkItem()
val listModel = modelBuilder.buildModel()
return SdkComboBoxModel(selectedItem, project, sdksModel, listModel, modelBuilder)
@@ -49,9 +53,9 @@ class SdkComboBoxModel private constructor(
@JvmStatic
fun createJdkComboBoxModel(project: Project, sdksModel: ProjectSdksModel): SdkComboBoxModel {
val sdkTypeFilter = Condition<SdkTypeId> { it is JavaSdkType }
val sdkTypeFilter = Predicate<SdkTypeId> { it is JavaSdkType }
val noJavaSdkTypes = { SdkType.getAllTypes().filterNot { it is SimpleJavaSdkType }.isEmpty() }
val sdkTypeCreationFilter = Condition<SdkTypeId> { noJavaSdkTypes() || it !is SimpleJavaSdkType }
val sdkTypeCreationFilter = Predicate<SdkTypeId> { it !is SimpleJavaSdkType || noJavaSdkTypes() }
return createSdkComboBoxModel(project, sdksModel, sdkTypeFilter, sdkTypeCreationFilter, null)
}
}
@@ -68,13 +68,18 @@ public abstract class SdkListItem {
}
}
static final class InvalidSdkItem extends SdkListItem {
final String mySdkName;
public static final class InvalidSdkItem extends SdkListItem {
private final String mySdkName;
InvalidSdkItem(@NotNull String name) {
mySdkName = name;
}
@NotNull
public String getSdkName() {
return mySdkName;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
@@ -129,7 +129,7 @@ public abstract class SdkListPresenter extends ColoredListCellRenderer<SdkListIt
setIcon(EMPTY_ICON); // to fix vertical size
if (value instanceof InvalidSdkItem) {
InvalidSdkItem item = (InvalidSdkItem)value;
final String str = ProjectBundle.message("jdk.combo.box.invalid.item", item.mySdkName);
final String str = ProjectBundle.message("jdk.combo.box.invalid.item", item.getSdkName());
append(str, SimpleTextAttributes.ERROR_ATTRIBUTES);
}
else if (value instanceof ProjectSdkItem) {
@@ -39,9 +39,9 @@ gradle.home.setting.type.explicit.empty=Gradle location is not specified
gradle.jvm.undefined=Please, set the Gradle JVM option
gradle.jvm.incorrect=Gradle JVM option is incorrect:\nPath:{0}
gradle.jvm.is.jre=Invalid Gradle JDK configuration found.
gradle.jvm.is.jre=Please, use JDK instead of JRE for Gradle importer.
gradle.jvm.is.invalid=Invalid Gradle JDK configuration found.
gradle.jvm.is.downloading=Jdk is downloading. Please, wait for it is ready.
gradle.jvm.is.downloading=Jdk is being downloaded, please wait.
gradle.open.gradle.settings=Open Gradle Settings
gradle.toolwindow.text.no.linked.project=\nThere is no Gradle project\nYou can {@action Gradle.LinkToProject} one.
@@ -61,8 +61,8 @@ class GradleExecutionAware : ExternalSystemExecutionAware {
waitForDownloadingIfNeeded(sdk, taskId, taskNotificationListener, project)
val sdkHomePath = sdk.homePath ?: jdkConfigurationError("gradle.jvm.is.invalid")
if (!JdkUtil.checkForJdk(sdkHomePath)) {
if (!ExternalSystemJdkUtil.isValidJdk(sdk)) {
val sdkHomePath = sdk.homePath ?: jdkConfigurationError("gradle.jvm.is.invalid")
if (JdkUtil.checkForJre(sdkHomePath)) {
jdkConfigurationError("gradle.jvm.is.jre")
}
@@ -2,7 +2,6 @@
package org.jetbrains.plugins.gradle.service.project.open
import com.intellij.openapi.externalSystem.service.execution.ExternalSystemJdkUtil
import com.intellij.openapi.projectRoots.JavaSdkType
import com.intellij.openapi.projectRoots.JdkUtil
import com.intellij.openapi.projectRoots.Sdk
import com.intellij.util.lang.JavaVersion
@@ -23,7 +22,7 @@ internal data class GradleJdk(val homePath: String, val version: JavaVersion, va
companion object {
@JvmStatic
fun valueOf(sdk: Sdk): GradleJdk? {
if (sdk.sdkType !is JavaSdkType) return null
if (!ExternalSystemJdkUtil.isValidJdk(sdk)) return null
val homePath = sdk.homePath ?: return null
val versionString = sdk.versionString ?: return null
return valueOf(homePath, versionString, sdk.name)
@@ -31,7 +30,7 @@ internal data class GradleJdk(val homePath: String, val version: JavaVersion, va
@JvmStatic
fun valueOf(homePath: String): GradleJdk? {
if (!JdkUtil.checkForJdk(homePath)) return null
if (!ExternalSystemJdkUtil.isValidJdk(homePath)) return null
val javaSdkType = ExternalSystemJdkUtil.getJavaSdkType()
val versionString = javaSdkType.getVersionString(homePath) ?: return null
val name = JdkUtil.suggestJdkName(versionString) ?: return null
@@ -10,7 +10,6 @@ import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.externalSystem.model.settings.LocationSettingType;
import com.intellij.openapi.externalSystem.service.execution.ExternalSystemJdkUtil;
import com.intellij.openapi.roots.ui.configuration.SdkComboBox;
import com.intellij.openapi.externalSystem.settings.ExternalProjectSettings;
import com.intellij.openapi.externalSystem.util.ExternalSystemUiUtil;
import com.intellij.openapi.externalSystem.util.PaintAwarePanel;
@@ -18,6 +17,10 @@ import com.intellij.openapi.options.ConfigurationException;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectManager;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.projectRoots.SdkType;
import com.intellij.openapi.projectRoots.SdkTypeId;
import com.intellij.openapi.projectRoots.SimpleJavaSdkType;
import com.intellij.openapi.roots.ui.configuration.SdkComboBox;
import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectSdksModel;
import com.intellij.openapi.roots.ui.util.CompositeAppearance;
import com.intellij.openapi.ui.ComboBox;
@@ -64,13 +67,16 @@ import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import java.util.function.Predicate;
import java.util.function.Supplier;
import static com.intellij.openapi.externalSystem.service.ui.ExternalSystemJdkComboBoxUtil.getSelectedJdkReference;
import static com.intellij.openapi.externalSystem.service.ui.ExternalSystemJdkComboBoxUtil.setSelectedJdkReference;
import static com.intellij.openapi.roots.ui.configuration.SdkComboBoxModel.createJdkComboBoxModel;
import static com.intellij.openapi.externalSystem.util.ExternalSystemUiUtil.INSETS;
import static com.intellij.openapi.roots.ui.configuration.SdkComboBoxModel.createSdkComboBoxModel;
/**
* @author Vladislav.Soroka
@@ -717,7 +723,11 @@ public class IdeaGradleProjectSettingsControlBuilder implements GradleProjectSet
if (myGradleJdkComboBox != null) {
myGradleJdkComboBoxWrapper.remove(myGradleJdkComboBox);
}
myGradleJdkComboBox = new SdkComboBox(createJdkComboBoxModel(project, sdksModel));
Predicate<SdkTypeId> sdkTypeFilter = it -> ExternalSystemJdkUtil.getJavaSdkType().equals(it);
Supplier<Boolean> allIsSimpleSdk = () -> Arrays.stream(SdkType.getAllTypes()).allMatch(it -> it instanceof SimpleJavaSdkType);
Predicate<SdkTypeId> sdkTypeCreationFilter = it -> !(it instanceof SimpleJavaSdkType) || allIsSimpleSdk.get();
Predicate<Sdk> sdkFilter = it -> ExternalSystemJdkUtil.isValidJdk(it);
myGradleJdkComboBox = new SdkComboBox(createSdkComboBoxModel(project, sdksModel, sdkTypeFilter, sdkTypeCreationFilter, sdkFilter));
myGradleJdkComboBoxWrapper.add(myGradleJdkComboBox, BorderLayout.CENTER);
}