IDEA-188581 Project Structure: SDK: two JDKs in Add new SDK list

This commit is contained in:
Vladislav.Soroka
2018-04-09 14:07:52 +03:00
parent c27f0031c1
commit 7766e86341
4 changed files with 21 additions and 6 deletions
@@ -22,7 +22,6 @@ import com.intellij.openapi.project.ProjectBundle;
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.OrderEntryAppearanceService;
import com.intellij.openapi.roots.ui.configuration.projectRoot.JdkListConfigurable;
import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectSdksModel;
@@ -46,6 +45,8 @@ import java.awt.*;
import java.util.Arrays;
import java.util.Collection;
import static com.intellij.openapi.projectRoots.SimpleJavaSdkType.notSimpleJavaSdkType;
/**
* @author Eugene Zhuravlev
* @since May 18, 2005
@@ -126,7 +127,7 @@ public class JdkComboBox extends ComboBoxWithWidePopup<JdkComboBox.JdkComboBoxIt
@NotNull
private static Condition<SdkTypeId> getCreationFilter(@Nullable Condition<SdkTypeId> creationFilter) {
return sdkTypeId -> !(sdkTypeId instanceof SimpleJavaSdkType) && (creationFilter == null || creationFilter.value(sdkTypeId));
return notSimpleJavaSdkType(creationFilter);
}
@Override
@@ -42,6 +42,8 @@ import javax.swing.tree.DefaultMutableTreeNode;
import java.awt.*;
import java.util.*;
import static com.intellij.openapi.projectRoots.SimpleJavaSdkType.notSimpleJavaSdkType;
public class ProjectJdksConfigurable extends MasterDetailsComponent {
private final ProjectSdksModel myProjectJdksModel;
private final Project myProject;
@@ -154,7 +156,7 @@ public class ProjectJdksConfigurable extends MasterDetailsComponent {
myProjectJdksModel.createAddActions(group, myTree, projectJdk -> {
addNode(new MyNode(new JdkConfigurable(((ProjectJdkImpl)projectJdk), myProjectJdksModel, TREE_UPDATER, myHistory, myProject), false), myRoot);
selectNodeInTree(findNodeByObject(myRoot, projectJdk));
});
}, notSimpleJavaSdkType());
actions.add(new MyActionGroupWrapper(group));
actions.add(new MyDeleteAction(Conditions.alwaysTrue()));
return actions;
@@ -12,7 +12,6 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectBundle;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.projectRoots.SdkModel;
import com.intellij.openapi.projectRoots.SimpleJavaSdkType;
import com.intellij.openapi.projectRoots.impl.ProjectJdkImpl;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.roots.ui.configuration.ProjectStructureConfigurable;
@@ -28,6 +27,8 @@ import org.jetbrains.annotations.Nullable;
import javax.swing.tree.TreePath;
import java.util.*;
import static com.intellij.openapi.projectRoots.SimpleJavaSdkType.notSimpleJavaSdkType;
public class JdkListConfigurable extends BaseStructureConfigurable {
@NotNull
private final ProjectSdksModel myJdksTreeModel;
@@ -164,8 +165,7 @@ public class JdkListConfigurable extends BaseStructureConfigurable {
@Override
public AnAction[] getChildren(@Nullable final AnActionEvent e) {
DefaultActionGroup group = new DefaultActionGroup(ProjectBundle.message("add.new.jdk.text"), true);
myJdksTreeModel.createAddActions(group, myTree, projectJdk -> addJdkNode(projectJdk, true),
sdkTypeId -> !(sdkTypeId instanceof SimpleJavaSdkType));
myJdksTreeModel.createAddActions(group, myTree, projectJdk -> addJdkNode(projectJdk, true), notSimpleJavaSdkType());
return group.getChildren(null);
}
};
@@ -5,10 +5,12 @@ package com.intellij.openapi.projectRoots;
import com.intellij.openapi.project.ProjectBundle;
import com.intellij.openapi.projectRoots.impl.SdkVersionUtil;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.util.lang.JavaVersion;
import org.jdom.Element;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jps.model.java.JdkVersionDetector;
import java.io.File;
@@ -95,4 +97,14 @@ public class SimpleJavaSdkType extends SdkType implements JavaSdkType {
JdkVersionDetector.JdkVersionInfo jdkInfo = SdkVersionUtil.getJdkVersionInfo(sdkHome);
return jdkInfo != null ? JdkVersionDetector.formatVersionString(jdkInfo.version) : null;
}
@NotNull
public static Condition<SdkTypeId> notSimpleJavaSdkType() {
return sdkTypeId -> !(sdkTypeId instanceof SimpleJavaSdkType);
}
@NotNull
public static Condition<SdkTypeId> notSimpleJavaSdkType(@Nullable Condition<SdkTypeId> condition) {
return sdkTypeId -> notSimpleJavaSdkType().value(sdkTypeId) && (condition == null || condition.value(sdkTypeId));
}
}