correctly set edited value

This commit is contained in:
Egor.Ushakov
2017-05-25 20:06:37 +03:00
parent 1b5dbcee31
commit 29c54b06b8
2 changed files with 23 additions and 22 deletions
@@ -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<JavaValue> 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) {
@@ -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)