IDEA-159007 Allow to keep class fields in enumeration children renderers

This commit is contained in:
Egor.Ushakov
2016-07-25 19:24:30 +03:00
parent 140b61c881
commit 430618622f
3 changed files with 45 additions and 9 deletions
@@ -68,6 +68,7 @@ class CompoundRendererConfigurable extends JPanel {
private XDebuggerExpressionEditor myListChildrenEditor;
private final JLabel myExpandedLabel;
private JBTable myTable;
private final JBCheckBox myAppendDefaultChildren;
@NonNls private static final String EMPTY_PANEL_ID = "EMPTY";
@NonNls private static final String DATA_PANEL_ID = "DATA";
private static final int NAME_TABLE_COLUMN = 0;
@@ -132,6 +133,8 @@ class CompoundRendererConfigurable extends JPanel {
}
});
myAppendDefaultChildren = new JBCheckBox(DebuggerBundle.message("label.compound.renderer.configurable.append.default.children"));
JPanel panel = new JPanel(new GridBagLayout());
panel.add(new JLabel(DebuggerBundle.message("label.compound.renderer.configurable.apply.to")),
new GridBagConstraints(0, GridBagConstraints.RELATIVE, 1, 1, 1.0, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE,
@@ -176,6 +179,9 @@ class CompoundRendererConfigurable extends JPanel {
panel.add(myChildrenListEditor,
new GridBagConstraints(0, GridBagConstraints.RELATIVE, 1, 1, 1.0, 1.0, GridBagConstraints.NORTHWEST, GridBagConstraints.BOTH,
JBUI.insets(4, 30, 0, 0), 0, 0));
panel.add(myAppendDefaultChildren,
new GridBagConstraints(0, GridBagConstraints.RELATIVE, 1, 1, 1.0, 0.0, GridBagConstraints.NORTHWEST, GridBagConstraints.NONE,
JBUI.insetsLeft(25), 0, 0));
add(new JPanel(), EMPTY_PANEL_ID);
add(panel, DATA_PANEL_ID);
}
@@ -214,7 +220,10 @@ class CompoundRendererConfigurable extends JPanel {
myChildrenExpandedEditor.setEnabled(isChildrenExpression);
myExpandedLabel.setEnabled(isChildrenExpression);
myChildrenEditor.setEnabled(isChildrenExpression);
myTable.setEnabled(myRbListChildrenRenderer.isSelected());
boolean isListChildren = myRbListChildrenRenderer.isSelected();
myTable.setEnabled(isListChildren);
myAppendDefaultChildren.setEnabled(isListChildren);
}
private JComponent createChildrenListEditor(JavaDebuggerEditorsProvider editorsProvider) {
@@ -318,7 +327,9 @@ class CompoundRendererConfigurable extends JPanel {
((ExpressionChildrenRenderer)childrenRenderer).setChildrenExpandable(TextWithImportsImpl.fromXExpression(myChildrenExpandedEditor.getExpression()));
}
else if (myRbListChildrenRenderer.isSelected()) {
childrenRenderer = new EnumerationChildrenRenderer(getTableModel().getExpressions());
EnumerationChildrenRenderer enumerationChildrenRenderer = new EnumerationChildrenRenderer(getTableModel().getExpressions());
enumerationChildrenRenderer.setAppendDefaultChildren(myAppendDefaultChildren.isSelected());
childrenRenderer = enumerationChildrenRenderer;
}
renderer.setChildrenRenderer(childrenRenderer);
// classname
@@ -351,28 +362,28 @@ class CompoundRendererConfigurable extends JPanel {
myLabelEditor.setExpression(TextWithImportsImpl.toXExpression(((LabelRenderer)labelRenderer).getLabelExpression()));
}
getTableModel().clear();
myAppendDefaultChildren.setSelected(false);
if (rendererSettings.isBase(childrenRenderer)) {
myRbDefaultChildrenRenderer.setSelected(true);
myChildrenEditor.setExpression(TextWithImportsImpl.toXExpression(emptyExpressionFragment));
myChildrenExpandedEditor.setExpression(TextWithImportsImpl.toXExpression(emptyExpressionFragment));
getTableModel().clear();
}
else if (childrenRenderer instanceof ExpressionChildrenRenderer) {
myRbExpressionChildrenRenderer.setSelected(true);
final ExpressionChildrenRenderer exprRenderer = (ExpressionChildrenRenderer)childrenRenderer;
myChildrenEditor.setExpression(TextWithImportsImpl.toXExpression(exprRenderer.getChildrenExpression()));
myChildrenExpandedEditor.setExpression(TextWithImportsImpl.toXExpression(exprRenderer.getChildrenExpandable()));
getTableModel().clear();
}
else {
myRbListChildrenRenderer.setSelected(true);
myChildrenEditor.setExpression(TextWithImportsImpl.toXExpression(emptyExpressionFragment));
myChildrenExpandedEditor.setExpression(TextWithImportsImpl.toXExpression(emptyExpressionFragment));
if (childrenRenderer instanceof EnumerationChildrenRenderer) {
getTableModel().init(((EnumerationChildrenRenderer)childrenRenderer).getChildren());
}
else {
getTableModel().clear();
EnumerationChildrenRenderer enumerationRenderer = (EnumerationChildrenRenderer)childrenRenderer;
getTableModel().init(enumerationRenderer.getChildren());
myAppendDefaultChildren.setSelected(enumerationRenderer.isAppendDefaultChildren());
}
}
@@ -16,6 +16,7 @@
package com.intellij.debugger.ui.tree.render;
import com.intellij.debugger.DebuggerContext;
import com.intellij.debugger.engine.DebugProcessImpl;
import com.intellij.debugger.engine.DebuggerUtils;
import com.intellij.debugger.engine.evaluation.EvaluateException;
import com.intellij.debugger.engine.evaluation.EvaluationContext;
@@ -24,6 +25,7 @@ import com.intellij.debugger.impl.descriptors.data.UserExpressionData;
import com.intellij.debugger.ui.impl.watch.ValueDescriptorImpl;
import com.intellij.debugger.ui.tree.*;
import com.intellij.openapi.util.InvalidDataException;
import com.intellij.openapi.util.JDOMExternalizerUtil;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.WriteExternalException;
import com.intellij.psi.PsiElement;
@@ -42,7 +44,10 @@ import java.util.List;
public final class EnumerationChildrenRenderer extends ReferenceRenderer implements ChildrenRenderer{
public static final @NonNls String UNIQUE_ID = "EnumerationChildrenRenderer";
private boolean myAppendDefaultChildren;
private List<Pair<String, TextWithImports>> myChildren;
public static final @NonNls String APPEND_DEFAULT_NAME = "AppendDefault";
public static final @NonNls String CHILDREN_EXPRESSION = "ChildrenExpression";
public static final @NonNls String CHILD_NAME = "Name";
@@ -55,6 +60,14 @@ public final class EnumerationChildrenRenderer extends ReferenceRenderer impleme
myChildren = children;
}
public void setAppendDefaultChildren(boolean appendDefaultChildren) {
myAppendDefaultChildren = appendDefaultChildren;
}
public boolean isAppendDefaultChildren() {
return myAppendDefaultChildren;
}
public String getUniqueId() {
return UNIQUE_ID;
}
@@ -68,6 +81,8 @@ public final class EnumerationChildrenRenderer extends ReferenceRenderer impleme
myChildren.clear();
myAppendDefaultChildren = "true".equals(JDOMExternalizerUtil.readField(element, APPEND_DEFAULT_NAME));
List<Element> children = element.getChildren(CHILDREN_EXPRESSION);
for (Element item : children) {
String name = item.getAttributeValue(CHILD_NAME);
@@ -80,6 +95,10 @@ public final class EnumerationChildrenRenderer extends ReferenceRenderer impleme
public void writeExternal(Element element) throws WriteExternalException {
super.writeExternal(element);
if (myAppendDefaultChildren) {
JDOMExternalizerUtil.writeField(element, APPEND_DEFAULT_NAME, "true");
}
for (Pair<String, TextWithImports> pair : myChildren) {
Element child = new Element(CHILDREN_EXPRESSION);
child.setAttribute(CHILD_NAME, pair.getFirst());
@@ -101,6 +120,10 @@ public final class EnumerationChildrenRenderer extends ReferenceRenderer impleme
);
}
builder.setChildren(children);
if (myAppendDefaultChildren) {
DebugProcessImpl.getDefaultRenderer(value).buildChildren(value, builder, evaluationContext);
}
}
public PsiElement getChildValueExpression(DebuggerTreeNode node, DebuggerContext context) throws EvaluateException {
@@ -108,7 +131,8 @@ public final class EnumerationChildrenRenderer extends ReferenceRenderer impleme
}
public boolean isExpandable(Value value, EvaluationContext evaluationContext, NodeDescriptor parentDescriptor) {
return myChildren.size() > 0;
return myChildren.size() > 0 ||
(myAppendDefaultChildren && DebugProcessImpl.getDefaultRenderer(value).isExpandable(value, evaluationContext, parentDescriptor));
}
public List<Pair<String, TextWithImports>> getChildren() {
@@ -215,6 +215,7 @@ label.compound.renderer.configurable.when.expanding=When expanding a node
label.compound.renderer.configurable.test.can.expand=Test if a node can be expanded (optional):
title.compound.renderer.configurable.choose.renderer.reference.type=Renderer Reference Type
text.base.renderer.configurable.no.class.patterns=No class patterns configured
label.compound.renderer.configurable.append.default.children=Append default children
button.add=Add
button.remove=&Remove
button.move.up=Move &Up