diff options
-rw-r--r-- | src/plugins/cppeditor/cppeditor.cpp | 5 | ||||
-rw-r--r-- | src/plugins/cpptools/cpptoolseditorsupport.cpp | 10 | ||||
-rw-r--r-- | src/plugins/cpptools/cpptoolseditorsupport.h | 9 |
3 files changed, 21 insertions, 3 deletions
diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp index dee2d1456e..6000d938de 100644 --- a/src/plugins/cppeditor/cppeditor.cpp +++ b/src/plugins/cppeditor/cppeditor.cpp @@ -1132,7 +1132,10 @@ void CPPEditorWidget::updateUses() { if (editorRevision() != m_highlightRevision) m_highlighter.cancel(); - m_updateUsesTimer->start(); + + // Block premature semantic info calculation when editor is created. + if (m_modelManager->cppEditorSupport(editor())->initialized()) + m_updateUsesTimer->start(); } void CPPEditorWidget::updateUsesNow() diff --git a/src/plugins/cpptools/cpptoolseditorsupport.cpp b/src/plugins/cpptools/cpptoolseditorsupport.cpp index e6538196c7..c44683eef3 100644 --- a/src/plugins/cpptools/cpptoolseditorsupport.cpp +++ b/src/plugins/cpptools/cpptoolseditorsupport.cpp @@ -175,6 +175,11 @@ void CppEditorSupport::setExtraDiagnostics(const QString &key, emit diagnosticsChanged(); } +bool CppEditorSupport::initialized() +{ + return m_initialized; +} + SemanticInfo CppEditorSupport::recalculateSemanticInfo(bool emitSignalWhenFinished) { m_futureSemanticInfo.cancel(); @@ -186,6 +191,11 @@ SemanticInfo CppEditorSupport::recalculateSemanticInfo(bool emitSignalWhenFinish void CppEditorSupport::recalculateSemanticInfoDetached(bool force) { + // Block premature calculation caused by CppEditorPlugin::currentEditorChanged + // when the editor is created. + if (!m_initialized) + return; + m_futureSemanticInfo.cancel(); SemanticInfo::Source source = currentSource(force); m_futureSemanticInfo = QtConcurrent::run<CppEditorSupport, void>( diff --git a/src/plugins/cpptools/cpptoolseditorsupport.h b/src/plugins/cpptools/cpptoolseditorsupport.h index d7534f33e2..2a027eabf0 100644 --- a/src/plugins/cpptools/cpptoolseditorsupport.h +++ b/src/plugins/cpptools/cpptoolseditorsupport.h @@ -98,12 +98,17 @@ public: void setExtraDiagnostics(const QString &key, const QList<CPlusPlus::Document::DiagnosticMessage> &messages); + /// True after the document was parsed/updated for the first time + /// and the first semantic info calculation was started. + bool initialized(); + /// Retrieve the semantic info, which will get recalculated on the current /// thread if it is outdate. SemanticInfo recalculateSemanticInfo(bool emitSignalWhenFinished = true); - /// Recalculates the semantic info in a future, and will emit the semanticInfoUpdated() signal - /// when finished. + /// Recalculates the semantic info in a future, and will emit the + /// semanticInfoUpdated() signal when finished. + /// Requires that initialized() is true. /// \param force do not check if the old semantic info is still valid void recalculateSemanticInfoDetached(bool force = false); |