From 3fb6d0d61ae5b9348257e8d6199c068510d0757a Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Wed, 5 Jul 2017 17:09:12 +0300 Subject: [PATCH] IDEA-175168 On-demand renderers - use on-demand toString renderer instead disabling it --- .../settings/DebuggerDataViewsConfigurable.java | 8 ++++---- .../debugger/settings/NodeRendererSettings.java | 4 ++++ .../debugger/ui/tree/render/LabelRenderer.java | 8 ++++---- .../ui/tree/render/ToStringRenderer.java | 17 +++++++++++++++-- 4 files changed, 27 insertions(+), 10 deletions(-) diff --git a/java/debugger/impl/src/com/intellij/debugger/settings/DebuggerDataViewsConfigurable.java b/java/debugger/impl/src/com/intellij/debugger/settings/DebuggerDataViewsConfigurable.java index 1462608b3121..99038932ae5d 100644 --- a/java/debugger/impl/src/com/intellij/debugger/settings/DebuggerDataViewsConfigurable.java +++ b/java/debugger/impl/src/com/intellij/debugger/settings/DebuggerDataViewsConfigurable.java @@ -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) { diff --git a/java/debugger/impl/src/com/intellij/debugger/settings/NodeRendererSettings.java b/java/debugger/impl/src/com/intellij/debugger/settings/NodeRendererSettings.java index faf1cf8bdec1..bed023659f29 100644 --- a/java/debugger/impl/src/com/intellij/debugger/settings/NodeRendererSettings.java +++ b/java/debugger/impl/src/com/intellij/debugger/settings/NodeRendererSettings.java @@ -170,6 +170,10 @@ public class NodeRendererSettings implements PersistentStateComponent { 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); diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/LabelRenderer.java b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/LabelRenderer.java index 577ecc6e317f..a82a65b3e40a 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/LabelRenderer.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/LabelRenderer.java @@ -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; } } diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ToStringRenderer.java b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ToStringRenderer.java index 21ccbcc53195..9b792702f3e1 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ToStringRenderer.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/ToStringRenderer.java @@ -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; + } }