From 5b88093b5d25ba2879cce8c13d9c40fe94e6953e Mon Sep 17 00:00:00 2001
From: Christian Kamm <christian.d.kamm@nokia.com>
Date: Mon, 12 Sep 2011 12:58:59 +0200
Subject: [PATCH] QmlJS semantic highlighter: Abort when file changes.

Fixes the warning in incrementalApplyExtraAdditionalFormats being
triggered when the document is reduced in size while a highlight is
running.

Change-Id: I60e0c8772d511f52ee433d27cc77ba726030b354
Reviewed-on: http://codereview.qt-project.org/4661
Reviewed-by: Leandro T. C. Melo <leandro.melo@nokia.com>
---
 src/plugins/qmljseditor/qmljseditor.cpp              | 2 ++
 src/plugins/qmljseditor/qmljssemantichighlighter.cpp | 9 +++++++++
 src/plugins/qmljseditor/qmljssemantichighlighter.h   | 3 +++
 3 files changed, 14 insertions(+)

diff --git a/src/plugins/qmljseditor/qmljseditor.cpp b/src/plugins/qmljseditor/qmljseditor.cpp
index b39eec3c427..5ec720ff10d 100644
--- a/src/plugins/qmljseditor/qmljseditor.cpp
+++ b/src/plugins/qmljseditor/qmljseditor.cpp
@@ -1015,6 +1015,8 @@ void QmlJSTextEditorWidget::showTextMarker()
 
 void QmlJSTextEditorWidget::updateUses()
 {
+    if (m_semanticHighlighter->startRevision() != editorRevision())
+        m_semanticHighlighter->cancel();
     m_updateUsesTimer->start();
 }
 
diff --git a/src/plugins/qmljseditor/qmljssemantichighlighter.cpp b/src/plugins/qmljseditor/qmljssemantichighlighter.cpp
index c45fe9d514b..dab142f85c8 100644
--- a/src/plugins/qmljseditor/qmljssemantichighlighter.cpp
+++ b/src/plugins/qmljseditor/qmljssemantichighlighter.cpp
@@ -386,6 +386,11 @@ void SemanticHighlighter::rerun(const ScopeChain &scopeChain)
     m_watcher.setFuture(f);
 }
 
+void SemanticHighlighter::cancel()
+{
+    m_watcher.cancel();
+}
+
 void SemanticHighlighter::applyResults(int from, int to)
 {
     if (m_watcher.isCanceled())
@@ -432,3 +437,7 @@ void SemanticHighlighter::updateFontSettings(const TextEditor::FontSettings &fon
     m_formats[LocalStateNameType] = fontSettings.toTextCharFormat(QLatin1String(TextEditor::Constants::C_QML_STATE_NAME));
 }
 
+int SemanticHighlighter::startRevision() const
+{
+    return m_startRevision;
+}
diff --git a/src/plugins/qmljseditor/qmljssemantichighlighter.h b/src/plugins/qmljseditor/qmljssemantichighlighter.h
index be5d7a175f0..18ee0306575 100644
--- a/src/plugins/qmljseditor/qmljssemantichighlighter.h
+++ b/src/plugins/qmljseditor/qmljssemantichighlighter.h
@@ -77,6 +77,9 @@ public:
     SemanticHighlighter(QmlJSTextEditorWidget *editor);
 
     void rerun(const QmlJS::ScopeChain &scopeChain);
+    void cancel();
+
+    int startRevision() const;
 
     void updateFontSettings(const TextEditor::FontSettings &fontSettings);
 
-- 
GitLab