summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cpptoolseditorsupport.cpp
diff options
context:
space:
mode:
authorNikolai Kosjar <nikolai.kosjar@digia.com>2013-06-18 16:26:40 +0200
committerNikolai Kosjar <nikolai.kosjar@digia.com>2013-06-24 11:13:35 +0200
commit6df66e883fae36d96efaa0d3976e11e895c0c9b7 (patch)
treecab37c9e93c9478d5219a39b00cf9cceffa664b9 /src/plugins/cpptools/cpptoolseditorsupport.cpp
parent10ff6769acdd5375c947cbcebace19545eade145 (diff)
downloadqt-creator-6df66e883fae36d96efaa0d3976e11e895c0c9b7.tar.gz
CppTools: Do not hand over partly reloaded files to the code model
When a reloading operation was in progress, CppEditorSupport::contents() could return a partly reloaded file to the code model leading to parse errors and incomplete highlighting. Fixed by checking if the file is currently being reloaded. Task-number: QTCREATORBUG-9382 Change-Id: Iee97e10444763c0cbf481132afa4617c5cdbd15c Reviewed-by: Erik Verbruggen <erik.verbruggen@digia.com>
Diffstat (limited to 'src/plugins/cpptools/cpptoolseditorsupport.cpp')
-rw-r--r--src/plugins/cpptools/cpptoolseditorsupport.cpp28
1 files changed, 25 insertions, 3 deletions
diff --git a/src/plugins/cpptools/cpptoolseditorsupport.cpp b/src/plugins/cpptools/cpptoolseditorsupport.cpp
index 7993ccd7dd..86efe3bd26 100644
--- a/src/plugins/cpptools/cpptoolseditorsupport.cpp
+++ b/src/plugins/cpptools/cpptoolseditorsupport.cpp
@@ -33,6 +33,7 @@
#include <coreplugin/editormanager/editormanager.h>
+#include <utils/qtcassert.h>
#include <utils/runextensions.h>
#include <QList>
@@ -113,6 +114,7 @@ CppEditorSupport::CppEditorSupport(CppModelManager *modelManager, BaseTextEditor
, m_updateDocumentInterval(UpdateDocumentDefaultInterval)
, m_revision(0)
, m_cachedContentsEditorRevision(-1)
+ , m_fileIsBeingReloaded(false)
, m_initialized(false)
, m_lastHighlightRevision(0)
, m_highlightingSupport(modelManager->highlightingSupport(textEditor))
@@ -142,6 +144,11 @@ CppEditorSupport::CppEditorSupport(CppModelManager *modelManager, BaseTextEditor
connect(m_textEditor->document(), SIGNAL(mimeTypeChanged()),
this, SLOT(onMimeTypeChanged()));
+ connect(m_textEditor->document(), SIGNAL(aboutToReload()),
+ this, SLOT(onAboutToReload()));
+ connect(m_textEditor->document(), SIGNAL(reloadFinished(bool)),
+ this, SLOT(onReloadFinished()));
+
updateDocument();
}
@@ -162,7 +169,7 @@ QString CppEditorSupport::fileName() const
QString CppEditorSupport::contents() const
{
const int editorRev = editorRevision();
- if (m_cachedContentsEditorRevision != editorRev) {
+ if (m_cachedContentsEditorRevision != editorRev && !m_fileIsBeingReloaded) {
m_cachedContentsEditorRevision = editorRev;
m_cachedContents = m_textEditor->textDocument()->contents();
}
@@ -233,9 +240,11 @@ void CppEditorSupport::updateDocumentNow()
} else {
m_updateDocumentTimer->stop();
- if (m_highlightingSupport && !m_highlightingSupport->requiresSemanticInfo()) {
+ if (m_fileIsBeingReloaded)
+ return;
+
+ if (m_highlightingSupport && !m_highlightingSupport->requiresSemanticInfo())
startHighlighting();
- }
const QStringList sourceFiles(m_textEditor->document()->fileName());
m_documentParser = m_modelManager->updateSourceFiles(sourceFiles);
@@ -505,3 +514,16 @@ void CppEditorSupport::onMimeTypeChanged()
updateDocumentNow();
}
+
+void CppEditorSupport::onAboutToReload()
+{
+ QTC_CHECK(!m_fileIsBeingReloaded);
+ m_fileIsBeingReloaded = true;
+}
+
+void CppEditorSupport::onReloadFinished()
+{
+ QTC_CHECK(m_fileIsBeingReloaded);
+ m_fileIsBeingReloaded = false;
+ updateDocument();
+}