From e9e47ab452eb1c2f38e1e6e0ffc141734f120324 Mon Sep 17 00:00:00 2001
From: hjk <hjk@theqtcompany.com>
Date: Tue, 17 May 2016 15:01:46 +0200
Subject: [PATCH] Debugger: Allow re-evaluation of certain expressions without
 stepping

There are cases like changing an Evaluated Expression that make
re-evaluation necessary.

Change-Id: I51fe46b67399a59aebbdeb9c3e778795b1c52cf1
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
---
 src/plugins/debugger/debuggerengine.cpp | 9 +++++++++
 src/plugins/debugger/debuggerengine.h   | 1 +
 src/plugins/debugger/watchhandler.cpp   | 2 +-
 3 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp
index 5c13d880171..57580df85cb 100644
--- a/src/plugins/debugger/debuggerengine.cpp
+++ b/src/plugins/debugger/debuggerengine.cpp
@@ -2043,6 +2043,15 @@ void DebuggerEngine::updateItem(const QByteArray &iname)
     doUpdateLocals(params);
 }
 
+void DebuggerEngine::updateWatchData(const QByteArray &iname)
+{
+    // This is used in cases where re-evaluation is ok for the same iname
+    // e.g. when changing the expression in a watcher.
+    UpdateParameters params;
+    params.partialVariable = iname;
+    doUpdateLocals(params);
+}
+
 void DebuggerEngine::expandItem(const QByteArray &iname)
 {
     updateItem(iname);
diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h
index 4d82620f6eb..86f7a567212 100644
--- a/src/plugins/debugger/debuggerengine.h
+++ b/src/plugins/debugger/debuggerengine.h
@@ -197,6 +197,7 @@ public:
     virtual bool canHandleToolTip(const DebuggerToolTipContext &) const;
     virtual void expandItem(const QByteArray &iname); // Called when item in tree gets expanded.
     virtual void updateItem(const QByteArray &iname); // Called for fresh watch items.
+    void updateWatchData(const QByteArray &iname); // FIXME: Merge with above.
     virtual void selectWatchData(const QByteArray &iname);
 
     virtual void startDebugger(DebuggerRunControl *runControl);
diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp
index 18786f2cf0b..bcbeffbaaa8 100644
--- a/src/plugins/debugger/watchhandler.cpp
+++ b/src/plugins/debugger/watchhandler.cpp
@@ -1445,7 +1445,7 @@ void WatchHandler::watchExpression(const QString &exp0, const QString &name)
         item->setValue(QString(QLatin1Char(' ')));
         item->update();
     } else {
-        m_model->m_engine->updateItem(item->iname);
+        m_model->m_engine->updateWatchData(item->iname);
     }
     updateWatchersWindow();
 }
-- 
GitLab