diff options
Diffstat (limited to 'java/debugger/impl/src/com/intellij/debugger/engine/JavaStackFrame.java')
-rw-r--r-- | java/debugger/impl/src/com/intellij/debugger/engine/JavaStackFrame.java | 23 |
1 files changed, 15 insertions, 8 deletions
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 bcd8257736c2..db28c4bf34a7 100644 --- a/java/debugger/impl/src/com/intellij/debugger/engine/JavaStackFrame.java +++ b/java/debugger/impl/src/com/intellij/debugger/engine/JavaStackFrame.java @@ -71,9 +71,12 @@ public class JavaStackFrame extends XStackFrame { private static final JavaFramesListRenderer FRAME_RENDERER = new JavaFramesListRenderer(); private JavaDebuggerEvaluator myEvaluator = null; - public JavaStackFrame(@NotNull StackFrameProxyImpl stackFrameProxy, @NotNull DebugProcessImpl debugProcess, MethodsTracker tracker) { + public JavaStackFrame(@NotNull StackFrameProxyImpl stackFrameProxy, + @NotNull DebugProcessImpl debugProcess, + @NotNull MethodsTracker tracker, + @NotNull NodeManagerImpl nodeManager) { myDebugProcess = debugProcess; - myNodeManager = debugProcess.getXdebugProcess().getNodeManager(); + myNodeManager = nodeManager; myDescriptor = new StackFrameDescriptorImpl(stackFrameProxy, tracker); myDescriptor.setContext(null); myDescriptor.updateRepresentation(null, DescriptorLabelListener.DUMMY_LISTENER); @@ -311,8 +314,7 @@ public class JavaStackFrame extends XStackFrame { final Collection<Value> argValues = frame.getArgumentValues(); int index = 0; for (Value argValue : argValues) { - final ArgumentValueDescriptorImpl descriptor = myNodeManager.getArgumentValueDescriptor(null, index++, argValue, null); - children.add(JavaValue.create(descriptor, evaluationContext, myNodeManager)); + children.add(createArgumentValue(index++, argValue, null, evaluationContext)); } node.setMessage(MessageDescriptor.LOCAL_VARIABLES_INFO_UNAVAILABLE.getLabel(), XDebuggerUIConstants.INFORMATION_MESSAGE_ICON, SimpleTextAttributes.REGULAR_ATTRIBUTES, null); //myChildren.add(myNodeManager.createMessageNode(MessageDescriptor.LOCAL_VARIABLES_INFO_UNAVAILABLE)); @@ -323,9 +325,7 @@ public class JavaStackFrame extends XStackFrame { try { final Map<DecompiledLocalVariable, Value> values = LocalVariablesUtil.fetchValues(frame.getStackFrame(), decompiled); for (DecompiledLocalVariable var : decompiled) { - final Value value = values.get(var); - final ArgumentValueDescriptorImpl descriptor = myNodeManager.getArgumentValueDescriptor(null, var.getSlot(), value, var.getName()); - children.add(JavaValue.create(descriptor, evaluationContext, myNodeManager)); + children.add(createArgumentValue(var.getSlot(), values.get(var), var.getName(), evaluationContext)); } } catch (Exception ex) { @@ -339,6 +339,13 @@ public class JavaStackFrame extends XStackFrame { } } + private JavaValue createArgumentValue(int index, Value value, String name, EvaluationContextImpl evaluationContext) { + ArgumentValueDescriptorImpl descriptor = myNodeManager.getArgumentValueDescriptor(null, index, value, name); + // setContext is required to calculate correct name + descriptor.setContext(evaluationContext); + return JavaValue.create(descriptor, evaluationContext, myNodeManager); + } + protected void superBuildVariables(final EvaluationContextImpl evaluationContext, XValueChildrenList children) throws EvaluateException { final StackFrameProxyImpl frame = getStackFrameProxy(); for (final LocalVariableProxyImpl local : frame.visibleVariables()) { @@ -354,6 +361,6 @@ public class JavaStackFrame extends XStackFrame { @Nullable @Override public Object getEqualityObject() { - return getStackFrameProxy().hashCode(); + return myDescriptor.getMethod(); } } |