diff --git a/java/debugger/impl/src/com/intellij/debugger/actions/ShowReferringObjectsAction.java b/java/debugger/impl/src/com/intellij/debugger/actions/ShowReferringObjectsAction.java index d5efd4e1185f..421920cd2876 100644 --- a/java/debugger/impl/src/com/intellij/debugger/actions/ShowReferringObjectsAction.java +++ b/java/debugger/impl/src/com/intellij/debugger/actions/ShowReferringObjectsAction.java @@ -24,7 +24,9 @@ import com.intellij.debugger.ui.impl.watch.NodeManagerImpl; import com.intellij.debugger.ui.impl.watch.ValueDescriptorImpl; import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.psi.PsiExpression; -import com.intellij.xdebugger.frame.*; +import com.intellij.xdebugger.frame.XCompositeNode; +import com.intellij.xdebugger.frame.XValue; +import com.intellij.xdebugger.frame.XValueChildrenList; import com.intellij.xdebugger.impl.ui.tree.XDebuggerTree; import com.intellij.xdebugger.impl.ui.tree.XInspectDialog; import com.intellij.xdebugger.impl.ui.tree.actions.XDebuggerTreeActionBase; @@ -63,11 +65,11 @@ public class ShowReferringObjectsAction extends XDebuggerTreeActionBase { @NotNull ValueDescriptorImpl valueDescriptor, @NotNull EvaluationContextImpl evaluationContext, NodeManagerImpl nodeManager) { - super(parent, valueDescriptor, evaluationContext, nodeManager); + super(parent, valueDescriptor, evaluationContext, nodeManager, false); } public ReferringObjectsValue(JavaValue javaValue) { - super(null, javaValue.getDescriptor(), javaValue.getEvaluationContext(), null); + super(null, javaValue.getDescriptor(), javaValue.getEvaluationContext(), null, false); } @Override diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/JavaDebuggerEvaluator.java b/java/debugger/impl/src/com/intellij/debugger/engine/JavaDebuggerEvaluator.java index e37576bae8f4..f2178c1d4fb5 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/JavaDebuggerEvaluator.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/JavaDebuggerEvaluator.java @@ -15,6 +15,7 @@ */ package com.intellij.debugger.engine; +import com.intellij.debugger.engine.evaluation.EvaluateException; import com.intellij.debugger.engine.evaluation.EvaluationContextImpl; import com.intellij.debugger.engine.evaluation.TextWithImportsImpl; import com.intellij.debugger.engine.events.DebuggerContextCommandImpl; @@ -73,9 +74,16 @@ public class JavaDebuggerEvaluator extends XDebuggerEvaluator { callback.errorOccurred("Context is not available"); return; } + descriptor.setContext(evalContext); + @SuppressWarnings("ThrowableResultOfMethodCallIgnored") + EvaluateException exception = descriptor.getEvaluateException(); + if (exception != null) { + callback.errorOccurred(exception.getMessage()); + return; + } JavaDebugProcess process = myDebugProcess.getXdebugProcess(); if (process != null) { - callback.evaluated(JavaValue.create(descriptor, evalContext, process.getNodeManager())); + callback.evaluated(JavaValue.create(null, descriptor, evalContext, process.getNodeManager(), true)); } } }); diff --git a/java/debugger/impl/src/com/intellij/debugger/engine/JavaStackFrame.java b/java/debugger/impl/src/com/intellij/debugger/engine/JavaStackFrame.java index 3f649e2b1dab..e7db635abe13 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/JavaStackFrame.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/JavaStackFrame.java @@ -370,7 +370,7 @@ public class JavaStackFrame extends XStackFrame { ArgumentValueDescriptorImpl descriptor = myNodeManager.getArgumentValueDescriptor(null, index, value, name); // setContext is required to calculate correct name descriptor.setContext(evaluationContext); - return JavaValue.create(descriptor, evaluationContext, myNodeManager); + return JavaValue.create(null, descriptor, evaluationContext, myNodeManager, true); } protected void superBuildVariables(final EvaluationContextImpl evaluationContext, XValueChildrenList children) throws EvaluateException { 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 7512bb7a153a..e1b4b77d9f03 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/JavaValue.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/JavaValue.java @@ -66,27 +66,34 @@ public class JavaValue extends XNamedValue implements NodeDescriptorProvider, XV private final ValueDescriptorImpl myValueDescriptor; private final EvaluationContextImpl myEvaluationContext; private final NodeManagerImpl myNodeManager; + private final boolean myContextSet; protected JavaValue(JavaValue parent, @NotNull ValueDescriptorImpl valueDescriptor, @NotNull EvaluationContextImpl evaluationContext, - NodeManagerImpl nodeManager) { + NodeManagerImpl nodeManager, + boolean contextSet) { super(valueDescriptor.getName()); myParent = parent; myValueDescriptor = valueDescriptor; myEvaluationContext = evaluationContext; myNodeManager = nodeManager; + myContextSet = contextSet; } - private static JavaValue create(JavaValue parent, @NotNull ValueDescriptorImpl valueDescriptor, EvaluationContextImpl evaluationContext, NodeManagerImpl nodeManager, boolean init) { + static JavaValue create(JavaValue parent, + @NotNull ValueDescriptorImpl valueDescriptor, + EvaluationContextImpl evaluationContext, + NodeManagerImpl nodeManager, + boolean contextSet) { DebuggerManagerThreadImpl.assertIsManagerThread(); - return new JavaValue(parent, valueDescriptor, evaluationContext, nodeManager); + return new JavaValue(parent, valueDescriptor, evaluationContext, nodeManager, contextSet); } static JavaValue create(@NotNull ValueDescriptorImpl valueDescriptor, EvaluationContextImpl evaluationContext, NodeManagerImpl nodeManager) { - return create(null, valueDescriptor, evaluationContext, nodeManager, true); + return create(null, valueDescriptor, evaluationContext, nodeManager, false); } public JavaValue getParent() { @@ -113,7 +120,9 @@ public class JavaValue extends XNamedValue implements NodeDescriptorProvider, XV @Override public void threadAction() { - myValueDescriptor.setContext(myEvaluationContext); + if (!myContextSet) { + myValueDescriptor.setContext(myEvaluationContext); + } myValueDescriptor.updateRepresentation(myEvaluationContext, new DescriptorLabelListener() { @Override public void labelChanged() { 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 f4da39f318a7..680d2ab424c3 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 @@ -203,6 +203,7 @@ public abstract class ValueDescriptorImpl extends NodeDescriptorImpl implements } catch (EvaluateException e) { myValueException = e; + setFailed(e); myValue = getTargetExceptionWithStackTraceFilled(evaluationContext, e); myIsExpandable = false; }