From c1d681811aa496b56ed62137e0e0ee38e4d207eb Mon Sep 17 00:00:00 2001
From: Olivier Goffart <olivier.goffart@nokia.com>
Date: Fri, 16 Jul 2010 16:37:40 +0200
Subject: [PATCH] QmlJsDelta: When coputing the debug ids, we need to do it on
 the original document.

Else, the line numbers does not match anymore.
---
 src/plugins/qmljsinspector/qmljsdelta.cpp           | 12 ++++++++++++
 src/plugins/qmljsinspector/qmljsdelta.h             |  5 ++++-
 src/plugins/qmljsinspector/qmljsinspector.h         |  3 ---
 src/plugins/qmljsinspector/qmljslivetextpreview.cpp |  7 +++++--
 src/plugins/qmljsinspector/qmljslivetextpreview.h   |  2 +-
 5 files changed, 22 insertions(+), 7 deletions(-)

diff --git a/src/plugins/qmljsinspector/qmljsdelta.cpp b/src/plugins/qmljsinspector/qmljsdelta.cpp
index c4ee16aee2d..1a45632bec1 100644
--- a/src/plugins/qmljsinspector/qmljsdelta.cpp
+++ b/src/plugins/qmljsinspector/qmljsdelta.cpp
@@ -280,6 +280,9 @@ static QString _methodName(UiSourceElement *source)
 
 void Delta::insert(UiObjectMember *member, UiObjectMember *parentMember, const QList<QDeclarativeDebugObjectReference > &debugReferences, const Document::Ptr &doc)
 {
+    if (doNotSendChanges)
+        return;
+
     if (!member || !parentMember)
         return;
 
@@ -311,6 +314,9 @@ void QmlJSInspector::Internal::Delta::update(UiObjectDefinition* oldObject, cons
                                              UiObjectDefinition* newObject, const QmlJS::Document::Ptr& newDoc,
                                              const QList< QDeclarativeDebugObjectReference >& debugReferences)
 {
+    if (doNotSendChanges)
+        return;
+
     Q_ASSERT (oldObject && newObject);
     QSet<QString> presentBinding;
 
@@ -372,6 +378,10 @@ void QmlJSInspector::Internal::Delta::update(UiObjectDefinition* oldObject, cons
         }
     }
 
+
+    if (doNotSendChanges)
+        return;
+
     //reset property that are not present in the new object.
     for (UiObjectMemberList *previousObjectMemberIt = Delta::objectMembers(oldObject); previousObjectMemberIt; previousObjectMemberIt = previousObjectMemberIt->next) {
         if (UiScriptBinding *previousScript = cast<UiScriptBinding *>(previousObjectMemberIt->member)) {
@@ -562,6 +572,8 @@ void Delta::updateScriptBinding(const QDeclarativeDebugObjectReference &objectRe
                                 const QString &propertyName,
                                 const QString &scriptCode)
 {
+    if (doNotSendChanges)
+        return;
     QVariant expr = scriptCode;
 
     const bool isLiteral = isLiteralValue(scriptBinding);
diff --git a/src/plugins/qmljsinspector/qmljsdelta.h b/src/plugins/qmljsinspector/qmljsdelta.h
index 5cad4c68fd3..d58d9c5f3bc 100644
--- a/src/plugins/qmljsinspector/qmljsdelta.h
+++ b/src/plugins/qmljsinspector/qmljsdelta.h
@@ -46,6 +46,10 @@ namespace Internal {
 class Delta
 {
 public:
+    Delta() : doNotSendChanges(false) {}
+
+    bool doNotSendChanges;
+
     struct Change {
         Change(): script(0), isLiteral(false) {}
 
@@ -54,7 +58,6 @@ public:
         QDeclarativeDebugObjectReference ref;
     };
 
-public:
     typedef QHash< UiObjectMember*, QList<QDeclarativeDebugObjectReference > > DebugIdMap;
     DebugIdMap operator()(const QmlJS::Document::Ptr &doc1, const QmlJS::Document::Ptr &doc2, const DebugIdMap &debugIds);
 
diff --git a/src/plugins/qmljsinspector/qmljsinspector.h b/src/plugins/qmljsinspector/qmljsinspector.h
index 8c8174922d7..dba440d40fd 100644
--- a/src/plugins/qmljsinspector/qmljsinspector.h
+++ b/src/plugins/qmljsinspector/qmljsinspector.h
@@ -75,9 +75,6 @@ public:
         CppProjectWithQmlEngines,
         QmlProjectWithCppPlugins
     };
-
-    QHash< QString, QList< QPair< QmlJS::AST::UiObjectMember*, int > > > m_initialTable;
-
 public:
     Inspector(QObject *parent = 0);
     virtual ~Inspector();
diff --git a/src/plugins/qmljsinspector/qmljslivetextpreview.cpp b/src/plugins/qmljsinspector/qmljslivetextpreview.cpp
index b4307e64443..d3f1b14b68a 100644
--- a/src/plugins/qmljsinspector/qmljslivetextpreview.cpp
+++ b/src/plugins/qmljsinspector/qmljslivetextpreview.cpp
@@ -98,7 +98,7 @@ void QmlJSLiveTextPreview::unassociateEditor(Core::IEditor *oldEditor)
 }
 
 QmlJSLiveTextPreview::QmlJSLiveTextPreview(QmlJS::Document::Ptr doc, QObject *parent) :
-    QObject(parent), m_previousDoc(doc)
+    QObject(parent), m_previousDoc(doc), m_initialDoc(doc)
 {
     ClientProxy *clientProxy = ClientProxy::instance();
     m_filename = doc->fileName();
@@ -177,7 +177,7 @@ void QmlJSLiveTextPreview::changeSelectedElements(QList<int> offsets, const QStr
 
 void QmlJSLiveTextPreview::updateDebugIds(const QDeclarativeDebugObjectReference &rootReference)
 {
-    QmlJS::Document::Ptr doc = m_previousDoc;
+    QmlJS::Document::Ptr doc = m_initialDoc;
 
     if (!doc->qmlProgram())
         return;
@@ -188,6 +188,9 @@ void QmlJSLiveTextPreview::updateDebugIds(const QDeclarativeDebugObjectReference
     doc->qmlProgram()->accept(&visitor);
 
     m_debugIds = visitor.result;
+    Delta delta;
+    delta.doNotSendChanges = true;
+    m_debugIds = delta(doc, m_previousDoc, m_debugIds);
 }
 
 void QmlJSLiveTextPreview::documentChanged(QmlJS::Document::Ptr doc)
diff --git a/src/plugins/qmljsinspector/qmljslivetextpreview.h b/src/plugins/qmljsinspector/qmljslivetextpreview.h
index 1b190010587..82651aa327c 100644
--- a/src/plugins/qmljsinspector/qmljslivetextpreview.h
+++ b/src/plugins/qmljsinspector/qmljslivetextpreview.h
@@ -55,10 +55,10 @@ private:
     QVariant castToLiteral(const QString &expression, QmlJS::AST::UiScriptBinding *scriptBinding);
 
 private:
-    QHash<QmlJS::AST::UiObjectMember*, QList<QDeclarativeDebugObjectReference> > m_initialTable;
     QHash<QmlJS::AST::UiObjectMember*, QList<QDeclarativeDebugObjectReference> > m_debugIds;
 
     QmlJS::Document::Ptr m_previousDoc;
+    QmlJS::Document::Ptr m_initialDoc; //the document that was loaded by the server
     QString m_filename;
 
     QList<QWeakPointer<QmlJSEditor::Internal::QmlJSTextEditor> > m_editors;
-- 
GitLab