fixed watches duplication
authorEgor.Ushakov <egor.ushakov@jetbrains.com>
Thu, 17 Mar 2016 13:13:02 +0000 (16:13 +0300)
committerEgor.Ushakov <egor.ushakov@jetbrains.com>
Thu, 17 Mar 2016 13:13:40 +0000 (16:13 +0300)
platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/actions/XCopyWatchAction.java
platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/tree/nodes/WatchNodeImpl.java

index 8de9515e8ee08c0751fa0e807f847ed5256656c4..e4990a57f0d475bf781886557f6dfd6d65513c45 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2000-2014 JetBrains s.r.o.
+ * Copyright 2000-2016 JetBrains s.r.o.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -16,7 +16,6 @@
 package com.intellij.xdebugger.impl.frame.actions;
 
 import com.intellij.openapi.actionSystem.AnActionEvent;
-import com.intellij.util.ObjectUtils;
 import com.intellij.xdebugger.XExpression;
 import com.intellij.xdebugger.impl.breakpoints.XExpressionImpl;
 import com.intellij.xdebugger.impl.frame.XWatchesView;
@@ -27,8 +26,6 @@ import com.intellij.xdebugger.impl.ui.tree.nodes.XDebuggerTreeNode;
 import com.intellij.xdebugger.impl.ui.tree.nodes.XValueNodeImpl;
 import org.jetbrains.annotations.NotNull;
 
-import java.util.List;
-
 /**
  * @author egor
  */
@@ -41,17 +38,14 @@ public class XCopyWatchAction extends XWatchesTreeActionBase {
   @Override
   protected void perform(@NotNull AnActionEvent e, @NotNull XDebuggerTree tree, @NotNull XWatchesView watchesView) {
     XDebuggerTreeNode root = tree.getRoot();
-    List<? extends XValueNodeImpl> nodes = getSelectedNodes(tree, XValueNodeImpl.class);
-    for (XValueNodeImpl node : nodes) {
-      int index = root.getIndex(node);
-      boolean isWatch = node instanceof WatchNode;
-      XExpression expression = isWatch ? ((WatchNode)node).getExpression() :
-                                XExpressionImpl.fromText(node.getName());
-      if (expression == null) continue;
-      node.getValueContainer().calculateEvaluationExpression().done(
-        expr -> DebuggerUIUtil.invokeLater(
-          () -> watchesView.addWatchExpression(ObjectUtils.notNull(expr, expression), isWatch ? index + 1 : -1, true)));
-
+    for (XValueNodeImpl node : getSelectedNodes(tree, XValueNodeImpl.class)) {
+      node.getValueContainer().calculateEvaluationExpression().done(expr -> {
+        XExpression watchExpression = expr != null ? expr : XExpressionImpl.fromText(node.getName());
+        if (watchExpression != null) {
+          DebuggerUIUtil.invokeLater(
+            () -> watchesView.addWatchExpression(watchExpression, node instanceof WatchNode ? root.getIndex(node) + 1 : -1, true));
+        }
+      });
     }
   }
 }
index 0273c045c5c2cb79d8f7d619ee0e4a19ffa5d8f7..38618c7ede395694b21c8aaac20c70dcf1185dae 100644 (file)
@@ -137,7 +137,7 @@ public class WatchNodeImpl extends XValueNodeImpl implements WatchNode {
     @Override
     @NotNull
     public Promise<XExpression> calculateEvaluationExpression() {
-      return myValue != null ? myValue.calculateEvaluationExpression() : Promise.reject("Not evaluated yet");
+      return Promise.resolve(myExpression);
     }
 
     @Override