diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/JdkComboBox.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/JdkComboBox.java index a6d238a8688e..aae24ea21e63 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/JdkComboBox.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/JdkComboBox.java @@ -17,10 +17,11 @@ package com.intellij.openapi.roots.ui.configuration; import com.intellij.ide.DataManager; import com.intellij.ide.util.projectWizard.ProjectJdkListRenderer; -import com.intellij.openapi.actionSystem.DefaultActionGroup; +import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectBundle; import com.intellij.openapi.projectRoots.Sdk; +import com.intellij.openapi.projectRoots.SdkType; import com.intellij.openapi.roots.ui.configuration.projectRoot.JdkListConfigurable; import com.intellij.openapi.roots.ui.configuration.projectRoot.ProjectSdksModel; import com.intellij.openapi.ui.ComboBoxWithWidePopup; @@ -48,15 +49,20 @@ import java.util.List; public class JdkComboBox extends ComboBoxWithWidePopup { @Nullable - private Condition myFilter; - + private final Condition myFilter; + @Nullable + private final Condition myCreationFilter; + public JdkComboBox(@NotNull final ProjectSdksModel jdkModel) { - this(jdkModel, null); + this(jdkModel, null, null); } - public JdkComboBox(@NotNull final ProjectSdksModel jdkModel, @Nullable Condition filter) { + public JdkComboBox(@NotNull final ProjectSdksModel jdkModel, + @Nullable Condition filter, + @Nullable Condition creationFilter) { super(new JdkComboBoxModel(jdkModel, filter)); myFilter = filter; + myCreationFilter = creationFilter; setRenderer(new ProjectJdkListRenderer(getRenderer()) { @Override public void doCustomize(JList list, Object value, int index, boolean selected, boolean hasFocus) { @@ -137,12 +143,18 @@ public class JdkComboBox extends ComboBoxWithWidePopup { } } } - }); - JBPopupFactory.getInstance() - .createActionGroupPopup(actionGroupTitle, group, - DataManager.getInstance().getDataContext(JdkComboBox.this), JBPopupFactory.ActionSelectionAid.MNEMONICS, - false) - .showUnderneathOf(setUpButton); + }, myCreationFilter); + final DataContext dataContext = DataManager.getInstance().getDataContext(JdkComboBox.this); + if (group.getChildrenCount() > 1) { + JBPopupFactory.getInstance() + .createActionGroupPopup(actionGroupTitle, group, dataContext, JBPopupFactory.ActionSelectionAid.MNEMONICS, false) + .showUnderneathOf(setUpButton); + } + else { + final AnActionEvent event = + new AnActionEvent(null, dataContext, ActionPlaces.UNKNOWN, new Presentation(""), ActionManager.getInstance(), 0); + group.getChildren(event)[0].actionPerformed(event); + } } }); } diff --git a/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ProjectSdksModel.java b/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ProjectSdksModel.java index eef29826d38a..bfd33af9a830 100644 --- a/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ProjectSdksModel.java +++ b/platform/lang-impl/src/com/intellij/openapi/roots/ui/configuration/projectRoot/ProjectSdksModel.java @@ -32,6 +32,7 @@ import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.ui.MasterDetailsComponent; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.Comparing; +import com.intellij.openapi.util.Condition; import com.intellij.util.ArrayUtil; import com.intellij.util.Consumer; import com.intellij.util.EventDispatcher; @@ -214,8 +215,16 @@ public class ProjectSdksModel implements SdkModel { } public void createAddActions(DefaultActionGroup group, final JComponent parent, final Consumer updateTree) { + createAddActions(group, parent, updateTree, null); + } + + public void createAddActions(DefaultActionGroup group, + final JComponent parent, + final Consumer updateTree, + @Nullable Condition filter) { final SdkType[] types = SdkType.getAllTypes(); for (final SdkType type : types) { + if (filter != null && !filter.value(type)) continue; final AnAction addAction = new DumbAwareAction(type.getPresentableName(), null, type.getIconForAddAction()) { diff --git a/platform/lang-impl/src/com/intellij/util/download/impl/FileSetVersionsFetcherBase.java b/platform/lang-impl/src/com/intellij/util/download/impl/FileSetVersionsFetcherBase.java index 6ed7a278cb3b..cef0acf2dba3 100644 --- a/platform/lang-impl/src/com/intellij/util/download/impl/FileSetVersionsFetcherBase.java +++ b/platform/lang-impl/src/com/intellij/util/download/impl/FileSetVersionsFetcherBase.java @@ -70,9 +70,17 @@ public abstract class FileSetVersionsFetcherBase