summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/cppeditor/cppeditor.cpp5
-rw-r--r--src/plugins/cpptools/cpptoolseditorsupport.cpp10
-rw-r--r--src/plugins/cpptools/cpptoolseditorsupport.h9
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);