diff --git a/java/debugger/impl/src/com/intellij/debugger/actions/ArrayAction.java b/java/debugger/impl/src/com/intellij/debugger/actions/ArrayAction.java index ce5d14958ee3..9c8d7b03b484 100644 --- a/java/debugger/impl/src/com/intellij/debugger/actions/ArrayAction.java +++ b/java/debugger/impl/src/com/intellij/debugger/actions/ArrayAction.java @@ -53,13 +53,7 @@ public abstract class ArrayAction extends DebuggerAction { return; } - final XValue container = node.getValueContainer(); - if (!(container instanceof JavaValue)) { - return; - } - - final ValueDescriptorImpl descriptor = ((JavaValue)container).getDescriptor(); - ArrayRenderer renderer = getArrayRenderer(descriptor); + ArrayRenderer renderer = getArrayRenderer(node.getValueContainer()); if (renderer == null) { return; } @@ -85,21 +79,25 @@ public abstract class ArrayAction extends DebuggerAction { boolean enable = false; List values = ViewAsGroup.getSelectedValues(e); if (values.size() == 1) { - enable = getArrayRenderer(values.get(0).getDescriptor()) != null; + enable = getArrayRenderer(values.get(0)) != null; } e.getPresentation().setEnabledAndVisible(enable); } @Nullable - private static ArrayRenderer getArrayRenderer(ValueDescriptorImpl descriptor) { - final Renderer lastRenderer = descriptor.getLastRenderer(); - if (lastRenderer instanceof ArrayRenderer) { - return (ArrayRenderer)lastRenderer; - } - if (lastRenderer instanceof CompoundNodeRenderer && ((CompoundNodeRenderer)lastRenderer).getChildrenRenderer() instanceof ExpressionChildrenRenderer) { - final NodeRenderer lastChildrenRenderer = ExpressionChildrenRenderer.getLastChildrenRenderer(descriptor); - if (lastChildrenRenderer instanceof ArrayRenderer) { - return (ArrayRenderer)lastChildrenRenderer; + public static ArrayRenderer getArrayRenderer(XValue value) { + if (value instanceof JavaValue) { + ValueDescriptorImpl descriptor = ((JavaValue)value).getDescriptor(); + final Renderer lastRenderer = descriptor.getLastRenderer(); + if (lastRenderer instanceof ArrayRenderer) { + return (ArrayRenderer)lastRenderer; + } + if (lastRenderer instanceof CompoundNodeRenderer && + ((CompoundNodeRenderer)lastRenderer).getChildrenRenderer() instanceof ExpressionChildrenRenderer) { + final NodeRenderer lastChildrenRenderer = ExpressionChildrenRenderer.getLastChildrenRenderer(descriptor); + if (lastChildrenRenderer instanceof ArrayRenderer) { + return (ArrayRenderer)lastChildrenRenderer; + } } } return null; @@ -107,15 +105,13 @@ public abstract class ArrayAction extends DebuggerAction { public static void setArrayRenderer(ArrayRenderer newRenderer, @NotNull XValueNodeImpl node, @NotNull DebuggerContextImpl debuggerContext) { XValue container = node.getValueContainer(); - if (!(container instanceof JavaValue)) { + + ArrayRenderer renderer = getArrayRenderer(container); + if (renderer == null) { return; } ValueDescriptorImpl descriptor = ((JavaValue)container).getDescriptor(); - ArrayRenderer renderer = getArrayRenderer(descriptor); - if (renderer == null) { - return; - } DebugProcessImpl debugProcess = debuggerContext.getDebugProcess(); if (debugProcess != null) { diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ArrayFilterInplaceEditor.kt b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ArrayFilterInplaceEditor.kt index bbc62012fb53..0dcedac43c14 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ArrayFilterInplaceEditor.kt +++ b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ArrayFilterInplaceEditor.kt @@ -38,6 +38,11 @@ import javax.swing.tree.TreeNode * @author egor */ class ArrayFilterInplaceEditor(node: XDebuggerTreeNode, val myTemp : Boolean) : XDebuggerTreeInplaceEditor(node, "arrayFilter") { + init { + val arrayRenderer = ArrayAction.getArrayRenderer((myNode.parent as XValueNodeImpl).valueContainer) + myExpressionEditor.expression = if (arrayRenderer is ArrayRenderer.Filtered) arrayRenderer.expression else null + } + override fun cancelEditing() { super.cancelEditing() if (myTemp) (myNode.parent as XValueNodeImpl).removeTemporaryEditorNode(myNode)