diff options
author | Christian Kamm <christian.d.kamm@nokia.com> | 2011-08-31 09:58:40 +0200 |
---|---|---|
committer | Christian Kamm <christian.d.kamm@nokia.com> | 2011-08-31 10:53:21 +0200 |
commit | 9f7a2194f7fd7a453acaa1d96b3c7a3ba571f044 (patch) | |
tree | 6a2d7123828bbbda2a0ddf52066eb2cb29bbbd47 /src/plugins/cpptools/cppmodelmanager.cpp | |
parent | 7bc8dd18a3f9a81f11ad993bb6b3219ddb6af56f (diff) | |
download | qt-creator-9f7a2194f7fd7a453acaa1d96b3c7a3ba571f044.tar.gz |
QmlJS: Fix infinite loop when scanning for exported C++ types.
Setting extra diagnostics would call updateDocument which would in turn
trigger another scan.
Change-Id: I3810a380cdf716a12767d94ff82dc30f8ae3954d
Reviewed-on: http://codereview.qt.nokia.com/3917
Reviewed-by: Roberto Raggi <roberto.raggi@nokia.com>
Reviewed-by: Leandro T. C. Melo <leandro.melo@nokia.com>
Diffstat (limited to 'src/plugins/cpptools/cppmodelmanager.cpp')
-rw-r--r-- | src/plugins/cpptools/cppmodelmanager.cpp | 28 |
1 files changed, 21 insertions, 7 deletions
diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp index 9a3fca3935..6856bc1f97 100644 --- a/src/plugins/cpptools/cppmodelmanager.cpp +++ b/src/plugins/cpptools/cppmodelmanager.cpp @@ -694,6 +694,8 @@ CppModelManager::CppModelManager(QObject *parent) // thread connections connect(this, SIGNAL(documentUpdated(CPlusPlus::Document::Ptr)), this, SLOT(onDocumentUpdated(CPlusPlus::Document::Ptr))); + connect(this, SIGNAL(extraDiagnosticsUpdated(QString)), + this, SLOT(onExtraDiagnosticsUpdated(QString))); // Listen for editor closed and opened events so that we can keep track of changing files connect(m_core->editorManager(), SIGNAL(editorOpened(Core::IEditor *)), @@ -968,6 +970,22 @@ void CppModelManager::onDocumentUpdated(Document::Ptr doc) if (outdated) return; + updateEditor(doc); +} + +void CppModelManager::onExtraDiagnosticsUpdated(const QString &fileName) +{ + protectSnapshot.lock(); + Document::Ptr doc = m_snapshot.document(fileName); + protectSnapshot.unlock(); + if (doc) + updateEditor(doc); +} + +void CppModelManager::updateEditor(Document::Ptr doc) +{ + const QString fileName = doc->fileName(); + QList<Core::IEditor *> openedEditors = m_core->editorManager()->openedEditors(); foreach (Core::IEditor *editor, openedEditors) { if (editor->file()->fileName() == fileName) { @@ -1297,15 +1315,11 @@ void CppModelManager::setExtraDiagnostics(const QString &fileName, int kind, { { QMutexLocker locker(&protectExtraDiagnostics); + if (m_extraDiagnostics[fileName][kind] == diagnostics) + return; m_extraDiagnostics[fileName].insert(kind, diagnostics); } - Document::Ptr doc; - { - QMutexLocker locker(&protectSnapshot); - doc = m_snapshot.document(fileName); - } - if (doc) - emit documentUpdated(doc); + emit extraDiagnosticsUpdated(fileName); } QList<Document::DiagnosticMessage> CppModelManager::extraDiagnostics(const QString &fileName, int kind) const |