IDEA-175168 On-demand renderers - use on-demand toString renderer instead disabling it

This commit is contained in:
Egor.Ushakov
2017-07-05 17:28:49 +03:00
parent 78e58494b1
commit 3fb6d0d61a
4 changed files with 27 additions and 10 deletions
@@ -1,5 +1,5 @@
/*
* Copyright 2000-2016 JetBrains s.r.o.
* Copyright 2000-2017 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -206,7 +206,7 @@ public class DebuggerDataViewsConfigurable implements SearchableConfigurable {
classRenderer.SHOW_STRINGS_TYPE = myCbShowStringsType.isSelected();
final ToStringRenderer toStringRenderer = rendererSettings.getToStringRenderer();
toStringRenderer.setEnabled(myCbEnableToString.isSelected());
toStringRenderer.setOnDemand(!myCbEnableToString.isSelected());
toStringRenderer.setUseClassFilters(myRbFromList.isSelected());
toStringRenderer.setClassFilters(myToStringFilterEditor.getFilters());
@@ -243,7 +243,7 @@ public class DebuggerDataViewsConfigurable implements SearchableConfigurable {
myCbShowStringsType.setSelected(classRenderer.SHOW_STRINGS_TYPE);
final ToStringRenderer toStringRenderer = rendererSettings.getToStringRenderer();
final boolean toStringEnabled = toStringRenderer.isEnabled();
final boolean toStringEnabled = !toStringRenderer.isOnDemand();
final boolean useClassFilters = toStringRenderer.isUseClassFilters();
myCbEnableToString.setSelected(toStringEnabled);
myRbAllThatOverride.setSelected(!useClassFilters);
@@ -292,7 +292,7 @@ public class DebuggerDataViewsConfigurable implements SearchableConfigurable {
final ToStringRenderer toStringRenderer = rendererSettings.getToStringRenderer();
final boolean isToStringRendererModified =
(toStringRenderer.isEnabled() != myCbEnableToString.isSelected()) ||
(toStringRenderer.isOnDemand() == myCbEnableToString.isSelected()) ||
(toStringRenderer.isUseClassFilters() != myRbFromList.isSelected()) ||
(!DebuggerUtilsEx.filterEquals(toStringRenderer.getClassFilters(), myToStringFilterEditor.getFilters()));
if (isToStringRendererModified) {
@@ -170,6 +170,10 @@ public class NodeRendererSettings implements PersistentStateComponent<Element> {
try {
if (ToStringRenderer.UNIQUE_ID.equals(id)) {
myToStringRenderer.readExternal(elem);
if (!myToStringRenderer.isEnabled()) {
myToStringRenderer.setEnabled(true);
myToStringRenderer.setOnDemand(true);
}
}
else if (ClassRenderer.UNIQUE_ID.equals(id)) {
myClassRenderer.readExternal(elem);
@@ -36,7 +36,7 @@ import javax.swing.*;
public class LabelRenderer extends TypeRenderer implements ValueLabelRenderer, OnDemandRenderer {
public static final @NonNls String UNIQUE_ID = "LabelRenderer";
public boolean myOnDemand;
public boolean ON_DEMAND;
private CachedEvaluator myLabelExpression = createCachedEvaluator();
@@ -123,14 +123,14 @@ public class LabelRenderer extends TypeRenderer implements ValueLabelRenderer, O
@Override
public boolean isOnDemand(EvaluationContext evaluationContext, ValueDescriptor valueDescriptor) {
return myOnDemand || OnDemandRenderer.super.isOnDemand(evaluationContext, valueDescriptor);
return ON_DEMAND || OnDemandRenderer.super.isOnDemand(evaluationContext, valueDescriptor);
}
public boolean isOnDemand() {
return myOnDemand;
return ON_DEMAND;
}
public void setOnDemand(boolean value) {
myOnDemand = value;
ON_DEMAND = value;
}
}
@@ -42,6 +42,7 @@ public class ToStringRenderer extends NodeRendererImpl implements OnDemandRender
public static final @NonNls String UNIQUE_ID = "ToStringRenderer";
private boolean USE_CLASS_FILTERS = false;
private boolean ON_DEMAND;
private ClassFilter[] myClassFilters = ClassFilter.EMPTY_ARRAY;
public ToStringRenderer() {
@@ -118,7 +119,7 @@ public class ToStringRenderer extends NodeRendererImpl implements OnDemandRender
@Override
public boolean isOnDemand(EvaluationContext evaluationContext, ValueDescriptor valueDescriptor) {
if (USE_CLASS_FILTERS && !isFiltered(valueDescriptor.getType())) {
if (ON_DEMAND || (USE_CLASS_FILTERS && !isFiltered(valueDescriptor.getType()))) {
return true;
}
return OnDemandRenderer.super.isOnDemand(evaluationContext, valueDescriptor);
@@ -167,7 +168,8 @@ public class ToStringRenderer extends NodeRendererImpl implements OnDemandRender
public void readExternal(Element element) {
super.readExternal(element);
USE_CLASS_FILTERS = "true".equalsIgnoreCase(JDOMExternalizerUtil.readField(element, "USE_CLASS_FILTERS"));
ON_DEMAND = Boolean.parseBoolean(JDOMExternalizerUtil.readField(element, "ON_DEMAND"));
USE_CLASS_FILTERS = Boolean.parseBoolean(JDOMExternalizerUtil.readField(element, "USE_CLASS_FILTERS"));
myClassFilters = DebuggerUtilsEx.readFilters(element.getChildren("filter"));
}
@@ -176,6 +178,9 @@ public class ToStringRenderer extends NodeRendererImpl implements OnDemandRender
public void writeExternal(Element element) {
super.writeExternal(element);
if (ON_DEMAND) {
JDOMExternalizerUtil.writeField(element, "ON_DEMAND", "true");
}
if (USE_CLASS_FILTERS) {
JDOMExternalizerUtil.writeField(element, "USE_CLASS_FILTERS", "true");
}
@@ -200,4 +205,12 @@ public class ToStringRenderer extends NodeRendererImpl implements OnDemandRender
}
return DebuggerUtilsEx.isFiltered(t.name(), myClassFilters);
}
public boolean isOnDemand() {
return ON_DEMAND;
}
public void setOnDemand(boolean value) {
ON_DEMAND = value;
}
}