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