value was requested twice for variable's children

This commit is contained in:
Egor.Ushakov
2014-06-17 16:17:11 +04:00
parent 7d5dca81ea
commit 02b9f02320
2 changed files with 9 additions and 5 deletions
@@ -130,6 +130,7 @@ public class JavaDebugProcess extends XDebugProcess {
myNodeManager = new NodeManagerImpl(session.getProject(), null) {
@Override
public DebuggerTreeNodeImpl createNode(final NodeDescriptor descriptor, EvaluationContext evaluationContext) {
// value gathered here is required for correct renderers work. e.g. array renderer
((NodeDescriptorImpl)descriptor).setContext((EvaluationContextImpl)evaluationContext);
final DebuggerTreeNodeImpl node = new DebuggerTreeNodeImpl(null, descriptor);
((NodeDescriptorImpl)descriptor).updateRepresentation((EvaluationContextImpl)evaluationContext, DescriptorLabelListener.DUMMY_LISTENER);
@@ -69,17 +69,19 @@ public class JavaValue extends XNamedValue implements NodeDescriptorProvider {
myNodeManager = nodeManager;
}
private static JavaValue create(JavaValue parent, @NotNull ValueDescriptorImpl valueDescriptor, EvaluationContextImpl evaluationContext, NodeManagerImpl nodeManager) {
private static JavaValue create(JavaValue parent, @NotNull ValueDescriptorImpl valueDescriptor, EvaluationContextImpl evaluationContext, NodeManagerImpl nodeManager, boolean init) {
DebuggerManagerThreadImpl.assertIsManagerThread();
valueDescriptor.setContext(evaluationContext);
valueDescriptor.updateRepresentation(evaluationContext, DescriptorLabelListener.DUMMY_LISTENER);
if (init) {
valueDescriptor.setContext(evaluationContext);
valueDescriptor.updateRepresentation(evaluationContext, DescriptorLabelListener.DUMMY_LISTENER);
}
return new JavaValue(parent, valueDescriptor, evaluationContext, nodeManager);
}
static JavaValue create(@NotNull ValueDescriptorImpl valueDescriptor,
EvaluationContextImpl evaluationContext,
NodeManagerImpl nodeManager) {
return create(null, valueDescriptor, evaluationContext, nodeManager);
return create(null, valueDescriptor, evaluationContext, nodeManager, true);
}
public JavaValue getParent() {
@@ -205,7 +207,8 @@ public class JavaValue extends XNamedValue implements NodeDescriptorProvider {
for (DebuggerTreeNode node : nodes) {
final NodeDescriptor descriptor = node.getDescriptor();
if (descriptor instanceof ValueDescriptorImpl) {
children.add(create(JavaValue.this, (ValueDescriptorImpl)descriptor, myEvaluationContext, myNodeManager));
// Value is calculated already in NodeManagerImpl
children.add(create(JavaValue.this, (ValueDescriptorImpl)descriptor, myEvaluationContext, myNodeManager, false));
}
else if (descriptor instanceof MessageDescriptor) {
children.add("", new XValue() {