diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/JavaValue.java b/java/debugger/impl/src/com/intellij/debugger/engine/JavaValue.java index 50d336c79d6d..b54830ba16bc 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/JavaValue.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/JavaValue.java @@ -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() { diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/ValueDescriptorImpl.java b/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/ValueDescriptorImpl.java index 17ff0fc7c61f..2446d1a03c98 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/ValueDescriptorImpl.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/impl/watch/ValueDescriptorImpl.java @@ -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() ); } diff --git a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/OnDemandRenderer.java b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/OnDemandRenderer.java index ef3509aacbdc..434c238e5ca2 100644 --- a/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/OnDemandRenderer.java +++ b/java/debugger/impl/src/com/intellij/debugger/ui/tree/render/OnDemandRenderer.java @@ -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()); } }