disable children rendering when renderers muted

This commit is contained in:
Egor.Ushakov
2017-08-15 13:28:45 +03:00
parent 826f2842eb
commit 7635a25881
3 changed files with 18 additions and 11 deletions
@@ -372,8 +372,8 @@ public class JavaValue extends XNamedValue implements NodeDescriptorProvider, XV
}
@Override
public void contextAction(@NotNull SuspendContextImpl suspendContext) throws Exception {
myValueDescriptor.getRenderer(myEvaluationContext.getDebugProcess())
public void contextAction(@NotNull SuspendContextImpl suspendContext) {
myValueDescriptor.getChildrenRenderer(myEvaluationContext.getDebugProcess())
.buildChildren(myValueDescriptor.getValue(), new ChildrenBuilder() {
@Override
public NodeDescriptorFactory getDescriptorManager() {
@@ -281,10 +281,12 @@ public abstract class ValueDescriptorImpl extends NodeDescriptorImpl implements
protected String calcRepresentation(EvaluationContextImpl context, DescriptorLabelListener labelListener){
DebuggerManagerThreadImpl.assertIsManagerThread();
final NodeRenderer renderer = getRenderer(context.getDebugProcess());
DebugProcessImpl debugProcess = context.getDebugProcess();
NodeRenderer renderer = getRenderer(debugProcess);
final EvaluateException valueException = myValueException;
myIsExpandable = (valueException == null || valueException.getExceptionFromTargetVM() != null) && renderer.isExpandable(getValue(), context, this);
EvaluateException valueException = myValueException;
myIsExpandable = (valueException == null || valueException.getExceptionFromTargetVM() != null) &&
getChildrenRenderer(debugProcess).isExpandable(getValue(), context, this);
try {
setValueIcon(renderer.calcValueIcon(this, context, labelListener));
@@ -401,7 +403,11 @@ public abstract class ValueDescriptorImpl extends NodeDescriptorImpl implements
return myRenderer != null ? myRenderer: myAutoRenderer;
}
public NodeRenderer getRenderer (DebugProcessImpl debugProcess) {
public NodeRenderer getChildrenRenderer(DebugProcessImpl debugProcess) {
return OnDemandRenderer.isOnDemandForced(debugProcess) ? DebugProcessImpl.getDefaultRenderer(getValue()) : getRenderer(debugProcess);
}
public NodeRenderer getRenderer(DebugProcessImpl debugProcess) {
DebuggerManagerThreadImpl.assertIsManagerThread();
Type type = getType();
if(type != null && myRenderer != null && myRenderer.isApplicable(type)) {
@@ -431,7 +437,7 @@ public abstract class ValueDescriptorImpl extends NodeDescriptorImpl implements
}
return DebuggerTreeNodeExpression.substituteThis(
vDescriptor.getRenderer(context.getDebugProcess()).getChildValueExpression(new DebuggerTreeNodeMock(value), context),
vDescriptor.getChildrenRenderer(context.getDebugProcess()).getChildValueExpression(new DebuggerTreeNodeMock(value), context),
((PsiExpression)parentEvaluation), vDescriptor.getValue()
);
}
@@ -17,6 +17,7 @@ package com.intellij.debugger.ui.tree.render;
import com.intellij.debugger.engine.DebugProcessImpl;
import com.intellij.debugger.engine.FullValueEvaluatorProvider;
import com.intellij.debugger.engine.JavaDebugProcess;
import com.intellij.debugger.engine.JavaValue;
import com.intellij.debugger.engine.evaluation.EvaluationContext;
import com.intellij.debugger.engine.evaluation.EvaluationContextImpl;
@@ -49,7 +50,7 @@ public interface OnDemandRenderer extends FullValueEvaluatorProvider {
String getLinkText();
default boolean isOnDemand(EvaluationContext evaluationContext, ValueDescriptor valueDescriptor) {
return isOnDemandForced(evaluationContext);
return isOnDemandForced((DebugProcessImpl)evaluationContext.getDebugProcess());
}
default boolean isShowValue(ValueDescriptor valueDescriptor, EvaluationContext evaluationContext) {
@@ -81,8 +82,8 @@ public interface OnDemandRenderer extends FullValueEvaluatorProvider {
ON_DEMAND_CALCULATED.set(descriptor, true);
}
static boolean isOnDemandForced(EvaluationContext evaluationContext) {
return ForceOnDemandRenderersAction.isForcedOnDemand(
(XDebugSessionImpl)((DebugProcessImpl)evaluationContext.getDebugProcess()).getXdebugProcess().getSession());
static boolean isOnDemandForced(DebugProcessImpl debugProcess) {
JavaDebugProcess process = debugProcess.getXdebugProcess();
return process != null && ForceOnDemandRenderersAction.isForcedOnDemand((XDebugSessionImpl)process.getSession());
}
}