summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppmodelmanager.cpp
diff options
context:
space:
mode:
authorChristian Kamm <christian.d.kamm@nokia.com>2011-08-31 09:58:40 +0200
committerChristian Kamm <christian.d.kamm@nokia.com>2011-08-31 10:53:21 +0200
commit9f7a2194f7fd7a453acaa1d96b3c7a3ba571f044 (patch)
tree6a2d7123828bbbda2a0ddf52066eb2cb29bbbd47 /src/plugins/cpptools/cppmodelmanager.cpp
parent7bc8dd18a3f9a81f11ad993bb6b3219ddb6af56f (diff)
downloadqt-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.cpp28
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