From e5dda07debaaa4309a8d6b2f7d8a4139a162418a Mon Sep 17 00:00:00 2001 From: Konstantin Aleev Date: Tue, 26 Feb 2019 16:06:12 +0300 Subject: [PATCH] RunDashboard: fix single selection actions visibility --- .../actions/CopyConfigurationAction.java | 4 +-- .../actions/EditConfigurationAction.java | 4 +-- .../actions/RunDashboardActionUtils.java | 30 +++++++++++++++++-- 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/execution/dashboard/actions/CopyConfigurationAction.java b/platform/lang-impl/src/com/intellij/execution/dashboard/actions/CopyConfigurationAction.java index cb2430101d63..8748b064c5dd 100644 --- a/platform/lang-impl/src/com/intellij/execution/dashboard/actions/CopyConfigurationAction.java +++ b/platform/lang-impl/src/com/intellij/execution/dashboard/actions/CopyConfigurationAction.java @@ -25,7 +25,7 @@ public class CopyConfigurationAction extends AnAction { @Override public void update(@NotNull AnActionEvent e) { Project project = e.getProject(); - RunDashboardRunConfigurationNode node = project == null ? null : RunDashboardActionUtils.getTargets(e).single(); + RunDashboardRunConfigurationNode node = project == null ? null : RunDashboardActionUtils.getTarget(e); boolean enabled = node != null && RunDashboardManager.getInstance(project).isShowConfigurations() && RunManager.getInstance(node.getProject()).hasSettings(node.getConfigurationSettings()); e.getPresentation().setEnabled(enabled); @@ -39,7 +39,7 @@ public class CopyConfigurationAction extends AnAction { @Override public void actionPerformed(@NotNull AnActionEvent e) { Project project = e.getProject(); - RunDashboardRunConfigurationNode node = project == null ? null : RunDashboardActionUtils.getTargets(e).single(); + RunDashboardRunConfigurationNode node = project == null ? null : RunDashboardActionUtils.getTarget(e); if (node == null) return; RunManager runManager = RunManager.getInstance(project); diff --git a/platform/lang-impl/src/com/intellij/execution/dashboard/actions/EditConfigurationAction.java b/platform/lang-impl/src/com/intellij/execution/dashboard/actions/EditConfigurationAction.java index 5415f76e7afa..27ab0963afa3 100644 --- a/platform/lang-impl/src/com/intellij/execution/dashboard/actions/EditConfigurationAction.java +++ b/platform/lang-impl/src/com/intellij/execution/dashboard/actions/EditConfigurationAction.java @@ -29,7 +29,7 @@ public class EditConfigurationAction extends AnAction { @Override public void update(@NotNull AnActionEvent e) { Project project = e.getProject(); - RunDashboardRunConfigurationNode node = project == null ? null : RunDashboardActionUtils.getTargets(e).single(); + RunDashboardRunConfigurationNode node = project == null ? null : RunDashboardActionUtils.getTarget(e); boolean enabled = node != null && RunManager.getInstance(node.getProject()).hasSettings(node.getConfigurationSettings()); e.getPresentation().setEnabled(enabled); boolean popupPlace = ActionPlaces.isPopupPlace(e.getPlace()); @@ -42,7 +42,7 @@ public class EditConfigurationAction extends AnAction { @Override public void actionPerformed(@NotNull AnActionEvent e) { Project project = e.getProject(); - RunDashboardRunConfigurationNode node = project == null ? null : RunDashboardActionUtils.getTargets(e).single(); + RunDashboardRunConfigurationNode node = project == null ? null : RunDashboardActionUtils.getTarget(e); if (node == null) return; RunDialog.editConfiguration(project, node.getConfigurationSettings(), diff --git a/platform/lang-impl/src/com/intellij/execution/dashboard/actions/RunDashboardActionUtils.java b/platform/lang-impl/src/com/intellij/execution/dashboard/actions/RunDashboardActionUtils.java index d6503ad12614..1de9a7af7019 100644 --- a/platform/lang-impl/src/com/intellij/execution/dashboard/actions/RunDashboardActionUtils.java +++ b/platform/lang-impl/src/com/intellij/execution/dashboard/actions/RunDashboardActionUtils.java @@ -9,6 +9,10 @@ import com.intellij.util.containers.JBIterable; import com.intellij.util.containers.JBTreeTraverser; import com.intellij.util.containers.TreeTraversal; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.ArrayList; +import java.util.List; class RunDashboardActionUtils { private RunDashboardActionUtils() { @@ -19,18 +23,38 @@ class RunDashboardActionUtils { return getTargets(e, RunDashboardRunConfigurationNode.class); } + @Nullable + static RunDashboardRunConfigurationNode getTarget(@NotNull AnActionEvent e) { + Object[] items = e.getData(PlatformDataKeys.SELECTED_ITEMS); + if (items == null || items.length != 1 || !(items[0] instanceof RunDashboardRunConfigurationNode)) return null; + + return (RunDashboardRunConfigurationNode)items[0]; + } + @NotNull static JBIterable getTargets(@NotNull AnActionEvent e, @NotNull Class clazz) { - return JBIterable.of(e.getData(PlatformDataKeys.SELECTED_ITEMS)).filter(clazz); + Object[] items = e.getData(PlatformDataKeys.SELECTED_ITEMS); + if (items == null) return JBIterable.empty(); + + List result = new ArrayList<>(); + for (Object item : items) { + if (!clazz.isInstance(item)) { + return JBIterable.empty(); + } + result.add(clazz.cast(item)); + } + return JBIterable.from(result); } @NotNull static JBIterable getLeafTargets(@NotNull AnActionEvent e) { JBIterable roots = JBIterable.of(e.getData(PlatformDataKeys.SELECTED_ITEMS)); - return JBTreeTraverser.from(o -> o instanceof GroupingNode ? ((GroupingNode)o).getChildren() : null) + JBIterable leaves = JBTreeTraverser.from(o -> o instanceof GroupingNode ? ((GroupingNode)o).getChildren() : null) .withRoots(roots) .traverse(TreeTraversal.LEAVES_DFS) - .filter(RunDashboardRunConfigurationNode.class) .unique(); + if (leaves.filter(leaf -> !(leaf instanceof RunDashboardRunConfigurationNode)).isNotEmpty()) return JBIterable.empty(); + + return leaves.filter(RunDashboardRunConfigurationNode.class); } }