From 0e723f7cd687e8b5c864b1d3c2d3964894180bb2 Mon Sep 17 00:00:00 2001 From: Eldar Abusalimov Date: Fri, 1 Jul 2022 04:05:46 +0200 Subject: [PATCH] action-update-thread: Make XDebuggerTreeActionBase.update() BGT-friendly Change XDebuggerTreeActionBase.getSelectedNodes() implementation to use a (precached) SELECTED_NODES from the data context. Update most of its inheritors to use ActionUpdateThread.BGT. GitOrigin-RevId: 7ca1072a0c67a7cf07111a082ae16f28ed3ba687 --- .../actions/CustomizeContextViewAction.java | 6 ++ .../actions/EditCustomFieldAction.java | 6 ++ .../actions/NewCustomFieldAction.java | 6 ++ .../debugger/actions/ViewAsGroup.java | 5 +- .../action/CalculateRetainedSizeAction.java | 6 ++ .../action/ShowInstancesByClassAction.java | 6 ++ .../JumpToAllocationSourceAction.java | 6 ++ .../impl/inline/XDebuggerTreeInlayPopup.java | 5 ++ .../xdebugger/impl/ui/tree/XDebuggerTree.java | 7 +- .../actions/ShowReferringObjectsAction.java | 6 ++ .../tree/actions/XDebuggerTreeActionBase.java | 28 ++------ .../impl/ui/tree/actions/XInspectAction.java | 6 ++ .../impl/ui/tree/actions/XSetValueAction.java | 6 ++ .../PyViewNumericContainerAction.java | 70 ++++++++----------- .../ConfigureTypeRenderersAction.kt | 25 +++---- 15 files changed, 109 insertions(+), 85 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/actions/CustomizeContextViewAction.java b/java/debugger/impl/src/com/intellij/debugger/actions/CustomizeContextViewAction.java index 90b052d87a0d..eda952c264de 100644 --- a/java/debugger/impl/src/com/intellij/debugger/actions/CustomizeContextViewAction.java +++ b/java/debugger/impl/src/com/intellij/debugger/actions/CustomizeContextViewAction.java @@ -5,6 +5,7 @@ import com.intellij.debugger.JavaDebuggerBundle; import com.intellij.debugger.settings.JavaDebuggerSettings; import com.intellij.debugger.settings.NodeRendererSettings; import com.intellij.idea.ActionsBundle; +import com.intellij.openapi.actionSystem.ActionUpdateThread; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.options.Configurable; import com.intellij.openapi.options.ConfigurationException; @@ -88,6 +89,11 @@ public class CustomizeContextViewAction extends XDebuggerTreeActionBase { } } + @Override + public @NotNull ActionUpdateThread getActionUpdateThread() { + return ActionUpdateThread.BGT; + } + @Override public void update(@NotNull AnActionEvent e) { e.getPresentation().setText(ActionsBundle.actionText("Debugger.CustomizeContextView")); diff --git a/java/debugger/impl/src/com/intellij/debugger/actions/EditCustomFieldAction.java b/java/debugger/impl/src/com/intellij/debugger/actions/EditCustomFieldAction.java index 4ea0017495c3..2f429dae9bd8 100644 --- a/java/debugger/impl/src/com/intellij/debugger/actions/EditCustomFieldAction.java +++ b/java/debugger/impl/src/com/intellij/debugger/actions/EditCustomFieldAction.java @@ -6,6 +6,7 @@ import com.intellij.debugger.ui.impl.watch.UserExpressionDescriptorImpl; import com.intellij.debugger.ui.impl.watch.ValueDescriptorImpl; import com.intellij.debugger.ui.tree.render.CustomFieldInplaceEditor; import com.intellij.debugger.ui.tree.render.EnumerationChildrenRenderer; +import com.intellij.openapi.actionSystem.ActionUpdateThread; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.xdebugger.impl.ui.tree.actions.XDebuggerTreeActionBase; import com.intellij.xdebugger.impl.ui.tree.nodes.XValueNodeImpl; @@ -24,6 +25,11 @@ public class EditCustomFieldAction extends XDebuggerTreeActionBase { } } + @Override + public @NotNull ActionUpdateThread getActionUpdateThread() { + return ActionUpdateThread.BGT; + } + @Override public void update(@NotNull final AnActionEvent e) { boolean enabled = false; diff --git a/java/debugger/impl/src/com/intellij/debugger/actions/NewCustomFieldAction.java b/java/debugger/impl/src/com/intellij/debugger/actions/NewCustomFieldAction.java index ef8f4db46e30..e81c326b1620 100644 --- a/java/debugger/impl/src/com/intellij/debugger/actions/NewCustomFieldAction.java +++ b/java/debugger/impl/src/com/intellij/debugger/actions/NewCustomFieldAction.java @@ -5,6 +5,7 @@ import com.intellij.debugger.engine.JavaValue; import com.intellij.debugger.ui.impl.watch.ValueDescriptorImpl; import com.intellij.debugger.ui.tree.render.CustomFieldInplaceEditor; import com.intellij.icons.AllIcons; +import com.intellij.openapi.actionSystem.ActionUpdateThread; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.xdebugger.impl.ui.tree.actions.XDebuggerTreeActionBase; import com.intellij.xdebugger.impl.ui.tree.nodes.XValueNodeImpl; @@ -22,6 +23,11 @@ public class NewCustomFieldAction extends XDebuggerTreeActionBase { CustomFieldInplaceEditor.editNew(node); } + @Override + public @NotNull ActionUpdateThread getActionUpdateThread() { + return ActionUpdateThread.BGT; + } + @Override public void update(@NotNull final AnActionEvent e) { boolean enabled = false; diff --git a/java/debugger/impl/src/com/intellij/debugger/actions/ViewAsGroup.java b/java/debugger/impl/src/com/intellij/debugger/actions/ViewAsGroup.java index 21e509448343..a4e0675cd761 100644 --- a/java/debugger/impl/src/com/intellij/debugger/actions/ViewAsGroup.java +++ b/java/debugger/impl/src/com/intellij/debugger/actions/ViewAsGroup.java @@ -187,10 +187,7 @@ public class ViewAsGroup extends ActionGroup implements DumbAware { @NotNull public static List getSelectedValues(@NotNull AnActionEvent event) { - List selectedNodes = event.getData(XDebuggerTree.SELECTED_NODES); - if (selectedNodes == null) { - return Collections.emptyList(); - } + List selectedNodes = XDebuggerTree.getSelectedNodes(event.getDataContext()); return StreamEx.of(selectedNodes) .map(XValueNodeImpl::getValueContainer) .select(JavaValue.class) diff --git a/java/debugger/impl/src/com/intellij/debugger/memory/action/CalculateRetainedSizeAction.java b/java/debugger/impl/src/com/intellij/debugger/memory/action/CalculateRetainedSizeAction.java index 335649cd9390..d9e85094e424 100644 --- a/java/debugger/impl/src/com/intellij/debugger/memory/action/CalculateRetainedSizeAction.java +++ b/java/debugger/impl/src/com/intellij/debugger/memory/action/CalculateRetainedSizeAction.java @@ -13,6 +13,7 @@ import com.intellij.debugger.memory.agent.MemoryAgentActionResult; import com.intellij.debugger.memory.agent.ui.RetainedSizeDialog; import com.intellij.debugger.settings.DebuggerSettings; import com.intellij.notification.NotificationType; +import com.intellij.openapi.actionSystem.ActionUpdateThread; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.Disposer; @@ -98,6 +99,11 @@ public class CalculateRetainedSizeAction extends DebuggerTreeAction { }); } + @Override + public @NotNull ActionUpdateThread getActionUpdateThread() { + return ActionUpdateThread.BGT; + } + @Override protected boolean isEnabled(@NotNull XValueNodeImpl node, @NotNull AnActionEvent e) { if (!super.isEnabled(node, e)) return false; diff --git a/java/debugger/impl/src/com/intellij/debugger/memory/action/ShowInstancesByClassAction.java b/java/debugger/impl/src/com/intellij/debugger/memory/action/ShowInstancesByClassAction.java index b8889ab7fdd2..f74bfde4135b 100644 --- a/java/debugger/impl/src/com/intellij/debugger/memory/action/ShowInstancesByClassAction.java +++ b/java/debugger/impl/src/com/intellij/debugger/memory/action/ShowInstancesByClassAction.java @@ -4,6 +4,7 @@ package com.intellij.debugger.memory.action; import com.intellij.debugger.JavaDebuggerBundle; import com.intellij.debugger.memory.ui.InstancesWindow; import com.intellij.debugger.memory.ui.JavaReferenceInfo; +import com.intellij.openapi.actionSystem.ActionUpdateThread; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.text.StringUtil; @@ -19,6 +20,11 @@ import java.util.Collections; import java.util.List; public class ShowInstancesByClassAction extends DebuggerTreeAction { + @Override + public @NotNull ActionUpdateThread getActionUpdateThread() { + return ActionUpdateThread.BGT; + } + @Override protected boolean isEnabled(@NotNull XValueNodeImpl node, @NotNull AnActionEvent e) { final ObjectReference ref = getObjectReference(node); diff --git a/java/debugger/impl/src/com/intellij/debugger/memory/action/tracking/JumpToAllocationSourceAction.java b/java/debugger/impl/src/com/intellij/debugger/memory/action/tracking/JumpToAllocationSourceAction.java index bacd4d4b86d5..6d7e831e286d 100644 --- a/java/debugger/impl/src/com/intellij/debugger/memory/action/tracking/JumpToAllocationSourceAction.java +++ b/java/debugger/impl/src/com/intellij/debugger/memory/action/tracking/JumpToAllocationSourceAction.java @@ -7,6 +7,7 @@ import com.intellij.debugger.memory.action.DebuggerTreeAction; import com.intellij.debugger.memory.component.MemoryViewDebugProcessData; import com.intellij.debugger.memory.ui.StackFramePopup; import com.intellij.debugger.memory.utils.StackFrameItem; +import com.intellij.openapi.actionSystem.ActionUpdateThread; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.project.Project; import com.intellij.xdebugger.XDebugSession; @@ -19,6 +20,11 @@ import org.jetbrains.annotations.Nullable; import java.util.List; public class JumpToAllocationSourceAction extends DebuggerTreeAction { + @Override + public @NotNull ActionUpdateThread getActionUpdateThread() { + return ActionUpdateThread.BGT; + } + @Override public void update(@NotNull AnActionEvent e) { e.getPresentation().setVisible(getStack(e) != null); diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/inline/XDebuggerTreeInlayPopup.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/inline/XDebuggerTreeInlayPopup.java index 25c1339897e0..fe605efe02f5 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/inline/XDebuggerTreeInlayPopup.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/inline/XDebuggerTreeInlayPopup.java @@ -66,6 +66,11 @@ public class XDebuggerTreeInlayPopup extends XDebuggerTreePopup { presentation.setText(XDebuggerBundle.message("debugger.inline.watches.popup.action.add.as.inline.watch")); } + @Override + public @NotNull ActionUpdateThread getActionUpdateThread() { + return ActionUpdateThread.BGT; + } + @Override protected void perform(XValueNodeImpl node, @NotNull String nodeName, AnActionEvent e) { node.calculateEvaluationExpression() diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/XDebuggerTree.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/XDebuggerTree.java index 517d9c874c74..60a1f13db407 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/XDebuggerTree.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/XDebuggerTree.java @@ -420,11 +420,14 @@ public class XDebuggerTree extends DnDAwareTree implements DataProvider, Disposa return e.getData(XDEBUGGER_TREE_KEY); } - @Nullable - public static XDebuggerTree getTree(DataContext context) { + public static @Nullable XDebuggerTree getTree(@NotNull DataContext context) { return XDEBUGGER_TREE_KEY.getData(context); } + public static @NotNull List getSelectedNodes(@NotNull DataContext context) { + return ContainerUtil.notNullize(SELECTED_NODES.getData(context)); + } + public void invokeLater(Runnable runnable) { EdtExecutorService.getInstance().execute(runnable); } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/actions/ShowReferringObjectsAction.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/actions/ShowReferringObjectsAction.java index 961fb7bcc4e3..fd0a3b97e7d8 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/actions/ShowReferringObjectsAction.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/actions/ShowReferringObjectsAction.java @@ -1,6 +1,7 @@ // Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.xdebugger.impl.ui.tree.actions; +import com.intellij.openapi.actionSystem.ActionUpdateThread; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.Presentation; import com.intellij.xdebugger.XDebugSession; @@ -15,6 +16,11 @@ import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; public class ShowReferringObjectsAction extends XDebuggerTreeActionBase { + @Override + public @NotNull ActionUpdateThread getActionUpdateThread() { + return ActionUpdateThread.BGT; + } + @Override public void update(@NotNull AnActionEvent e) { super.update(e); diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/actions/XDebuggerTreeActionBase.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/actions/XDebuggerTreeActionBase.java index eb1b2cdd84ba..5a132c1ba18d 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/actions/XDebuggerTreeActionBase.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/actions/XDebuggerTreeActionBase.java @@ -18,15 +18,13 @@ package com.intellij.xdebugger.impl.ui.tree.actions; import com.intellij.openapi.actionSystem.AnAction; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.DataContext; +import com.intellij.util.containers.ContainerUtil; import com.intellij.xdebugger.frame.XValue; import com.intellij.xdebugger.impl.ui.tree.XDebuggerTree; import com.intellij.xdebugger.impl.ui.tree.nodes.XValueNodeImpl; -import one.util.streamex.StreamEx; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import javax.swing.tree.TreePath; -import java.util.Collections; import java.util.List; public abstract class XDebuggerTreeActionBase extends AnAction { @@ -53,28 +51,12 @@ public abstract class XDebuggerTreeActionBase extends AnAction { return node.getName() != null; } - @NotNull - public static List getSelectedNodes(DataContext dataContext) { - XDebuggerTree tree = XDebuggerTree.getTree(dataContext); - if (tree == null) return Collections.emptyList(); - - TreePath[] paths = tree.getSelectionPaths(); - if (paths == null || paths.length == 0) { - return Collections.emptyList(); - } - return StreamEx.of(paths).map(TreePath::getLastPathComponent).select(XValueNodeImpl.class).toList(); + public static @NotNull List getSelectedNodes(@NotNull DataContext dataContext) { + return XDebuggerTree.getSelectedNodes(dataContext); } - @Nullable - public static XValueNodeImpl getSelectedNode(final DataContext dataContext) { - XDebuggerTree tree = XDebuggerTree.getTree(dataContext); - if (tree == null) return null; - - TreePath path = tree.getSelectionPath(); - if (path == null) return null; - - Object node = path.getLastPathComponent(); - return node instanceof XValueNodeImpl ? (XValueNodeImpl)node : null; + public static @Nullable XValueNodeImpl getSelectedNode(@NotNull DataContext dataContext) { + return ContainerUtil.getFirstItem(getSelectedNodes(dataContext)); } @Nullable diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/actions/XInspectAction.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/actions/XInspectAction.java index 83bf42f832e1..4d0952acca71 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/actions/XInspectAction.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/actions/XInspectAction.java @@ -1,6 +1,7 @@ // Copyright 2000-2021 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.xdebugger.impl.ui.tree.actions; +import com.intellij.openapi.actionSystem.ActionUpdateThread; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.xdebugger.frame.XValue; import com.intellij.xdebugger.impl.ui.DebuggerUIUtil; @@ -10,6 +11,11 @@ import com.intellij.xdebugger.impl.ui.tree.nodes.XValueNodeImpl; import org.jetbrains.annotations.NotNull; public class XInspectAction extends XDebuggerTreeActionBase { + @Override + public @NotNull ActionUpdateThread getActionUpdateThread() { + return ActionUpdateThread.BGT; + } + @Override protected void perform(XValueNodeImpl node, @NotNull final String nodeName, AnActionEvent e) { XDebuggerTree tree = node.getTree(); diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/actions/XSetValueAction.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/actions/XSetValueAction.java index e290465122b6..b3d381e7a527 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/actions/XSetValueAction.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/actions/XSetValueAction.java @@ -1,6 +1,7 @@ // Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.xdebugger.impl.ui.tree.actions; +import com.intellij.openapi.actionSystem.ActionUpdateThread; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.actionSystem.Presentation; import com.intellij.xdebugger.impl.ui.tree.SetValueInplaceEditor; @@ -9,6 +10,11 @@ import com.intellij.xdebugger.impl.ui.tree.nodes.XValueNodeImpl; import org.jetbrains.annotations.NotNull; public class XSetValueAction extends XDebuggerTreeActionBase { + @Override + public @NotNull ActionUpdateThread getActionUpdateThread() { + return ActionUpdateThread.BGT; + } + @Override public void update(@NotNull final AnActionEvent e) { super.update(e); diff --git a/python/src/com/jetbrains/python/debugger/containerview/PyViewNumericContainerAction.java b/python/src/com/jetbrains/python/debugger/containerview/PyViewNumericContainerAction.java index 99e93f7b96f8..bff2298be32b 100644 --- a/python/src/com/jetbrains/python/debugger/containerview/PyViewNumericContainerAction.java +++ b/python/src/com/jetbrains/python/debugger/containerview/PyViewNumericContainerAction.java @@ -17,17 +17,14 @@ package com.jetbrains.python.debugger.containerview; import com.intellij.openapi.actionSystem.ActionUpdateThread; import com.intellij.openapi.actionSystem.AnActionEvent; -import com.intellij.openapi.actionSystem.DataContext; import com.intellij.openapi.project.Project; -import com.intellij.xdebugger.impl.ui.tree.XDebuggerTree; import com.intellij.xdebugger.impl.ui.tree.actions.XDebuggerTreeActionBase; import com.intellij.xdebugger.impl.ui.tree.nodes.XValueNodeImpl; import com.jetbrains.python.PyBundle; import com.jetbrains.python.debugger.PyDebugValue; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; -import javax.swing.tree.TreePath; +import java.util.List; /** * @author amarch @@ -48,51 +45,42 @@ public class PyViewNumericContainerAction extends XDebuggerTreeActionBase { PyDataView.getInstance(project).show(debugValue); } - private static TreePath @Nullable [] getSelectedPaths(DataContext dataContext) { - XDebuggerTree tree = XDebuggerTree.getTree(dataContext); - return tree == null ? null : tree.getSelectionPaths(); - } - @Override public @NotNull ActionUpdateThread getActionUpdateThread() { - return ActionUpdateThread.EDT; + return ActionUpdateThread.BGT; } @Override public void update(@NotNull AnActionEvent e) { - e.getPresentation().setVisible(false); - TreePath[] paths = getSelectedPaths(e.getDataContext()); - if (paths != null) { - if (paths.length > 1) { - e.getPresentation().setVisible(false); - return; - } + List selectedNodes = getSelectedNodes(e.getDataContext()); + if (selectedNodes.size() != 1) { + e.getPresentation().setVisible(false); + return; + } - XValueNodeImpl node = getSelectedNode(e.getDataContext()); - if (node != null && node.getValueContainer() instanceof PyDebugValue && node.isComputed()) { - PyDebugValue debugValue = (PyDebugValue)node.getValueContainer(); + XValueNodeImpl node = selectedNodes.get(0); + if (!(node.getValueContainer() instanceof PyDebugValue) || !node.isComputed()) { + e.getPresentation().setVisible(false); + return; + } - String nodeType = debugValue.getType(); - if ("ndarray".equals(nodeType)) { - e.getPresentation().setText(PyBundle.message("debugger.numeric.view.as.array")); - e.getPresentation().setVisible(true); - } - else if ("DataFrame".equals(nodeType) || "GeoDataFrame".equals(nodeType)) { - e.getPresentation().setText(PyBundle.message("debugger.numeric.view.as.dataframe")); - e.getPresentation().setVisible(true); - } - else if ("Series".equals(nodeType) || "GeoSeries".equals(nodeType)) { - e.getPresentation().setText(PyBundle.message("debugger.numeric.view.as.series")); - e.getPresentation().setVisible(true); - } - else { - e.getPresentation().setVisible(false); - } - } - else - { - e.getPresentation().setVisible(false); - } + PyDebugValue debugValue = (PyDebugValue)node.getValueContainer(); + + String nodeType = debugValue.getType(); + if ("ndarray".equals(nodeType)) { + e.getPresentation().setText(PyBundle.message("debugger.numeric.view.as.array")); + e.getPresentation().setVisible(true); + } + else if ("DataFrame".equals(nodeType) || "GeoDataFrame".equals(nodeType)) { + e.getPresentation().setText(PyBundle.message("debugger.numeric.view.as.dataframe")); + e.getPresentation().setVisible(true); + } + else if ("Series".equals(nodeType) || "GeoSeries".equals(nodeType)) { + e.getPresentation().setText(PyBundle.message("debugger.numeric.view.as.series")); + e.getPresentation().setVisible(true); + } + else { + e.getPresentation().setVisible(false); } } } diff --git a/python/src/com/jetbrains/python/debugger/variablesview/usertyperenderers/ConfigureTypeRenderersAction.kt b/python/src/com/jetbrains/python/debugger/variablesview/usertyperenderers/ConfigureTypeRenderersAction.kt index 4efc6a8db402..ad42f93c4c27 100644 --- a/python/src/com/jetbrains/python/debugger/variablesview/usertyperenderers/ConfigureTypeRenderersAction.kt +++ b/python/src/com/jetbrains/python/debugger/variablesview/usertyperenderers/ConfigureTypeRenderersAction.kt @@ -11,7 +11,6 @@ import com.intellij.ui.SimpleTextAttributes import com.intellij.util.ui.JBUI import com.intellij.xdebugger.frame.XDebuggerTreeNodeHyperlink import com.intellij.xdebugger.frame.XValueChildrenList -import com.intellij.xdebugger.impl.ui.tree.XDebuggerTree import com.intellij.xdebugger.impl.ui.tree.actions.XDebuggerTreeActionBase import com.intellij.xdebugger.impl.ui.tree.nodes.XValueNodeImpl import com.jetbrains.python.PyBundle @@ -71,6 +70,16 @@ fun loadTypeRendererChildren(frameAccessor: PyFrameAccessor, } class ConfigureTypeRenderersAction : XDebuggerTreeActionBase() { + init { + templatePresentation.text = PyBundle.message("action.PyDebugger.CustomizeDataView.text") + } + + override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT + + override fun update(e: AnActionEvent) { + e.presentation.isVisible = getSelectedNodes(e.dataContext).size <= 1 + } + override fun perform(node: XValueNodeImpl, nodeName: String, e: AnActionEvent) { val project = e.project ?: ProjectManager.getInstance().defaultProject val debugValue = node.valueContainer as? PyDebugValue ?: return @@ -88,20 +97,6 @@ class ConfigureTypeRenderersAction : XDebuggerTreeActionBase() { } } - override fun getActionUpdateThread(): ActionUpdateThread { - return ActionUpdateThread.EDT - } - - override fun update(e: AnActionEvent) { - e.presentation.isVisible = false - val tree = XDebuggerTree.getTree(e.dataContext) - tree?.selectionPaths?.let { - if (it.size > 1) return - e.presentation.text = PyBundle.message("action.PyDebugger.CustomizeDataView.text") - e.presentation.isVisible = true - } - } - companion object { fun showSettingsWithNewRenderer(project: Project, debugValue: PyDebugValue) { ShowSettingsUtil.getInstance().showSettingsDialog(project, PyUserTypeRenderersConfigurable::class.java) {