From f3f3b96c8562345e42220c222a8f56c2e77bc32c Mon Sep 17 00:00:00 2001
From: Christian Kamm <christian.d.kamm@nokia.com>
Date: Tue, 31 Aug 2010 10:39:07 +0200
Subject: [PATCH] QmlJS: Improve performance by avoiding two links in
 SemanticHighlighter.

Reviewed-by: Roberto Raggi
---
 src/libs/qmljs/qmljscheck.cpp           | 5 ++---
 src/libs/qmljs/qmljscheck.h             | 4 +---
 src/plugins/qmljseditor/qmljseditor.cpp | 5 +++--
 3 files changed, 6 insertions(+), 8 deletions(-)

diff --git a/src/libs/qmljs/qmljscheck.cpp b/src/libs/qmljs/qmljscheck.cpp
index ae6ed1b3354..96d8d5e87cb 100644
--- a/src/libs/qmljs/qmljscheck.cpp
+++ b/src/libs/qmljs/qmljscheck.cpp
@@ -154,10 +154,10 @@ public:
 } // end of anonymous namespace
 
 
-Check::Check(Document::Ptr doc, const Snapshot &snapshot, const QStringList &importPaths)
+Check::Check(Document::Ptr doc, const Snapshot &snapshot, const Context *linkedContextNoScope)
     : _doc(doc)
     , _snapshot(snapshot)
-    , _link(&_context, doc, snapshot, importPaths)
+    , _context(*linkedContextNoScope)
     , _scopeBuilder(doc, &_context)
     , _ignoreTypeErrors(false)
 {
@@ -171,7 +171,6 @@ QList<DiagnosticMessage> Check::operator()()
 {
     _messages.clear();
     Node::accept(_doc->ast(), this);
-    _messages.append(_link.diagnosticMessages());
     return _messages;
 }
 
diff --git a/src/libs/qmljs/qmljscheck.h b/src/libs/qmljs/qmljscheck.h
index 918d62fd588..3015987dc73 100644
--- a/src/libs/qmljs/qmljscheck.h
+++ b/src/libs/qmljs/qmljscheck.h
@@ -32,7 +32,6 @@
 
 #include <qmljs/qmljsdocument.h>
 #include <qmljs/qmljsinterpreter.h>
-#include <qmljs/qmljslink.h>
 #include <qmljs/qmljsscopebuilder.h>
 #include <qmljs/parser/qmljsastvisitor_p.h>
 
@@ -46,7 +45,7 @@ class QMLJS_EXPORT Check: protected AST::Visitor
     Q_DECLARE_TR_FUNCTIONS(QmlJS::Check)
 
 public:
-    Check(Document::Ptr doc, const Snapshot &snapshot, const QStringList &importPaths);
+    Check(Document::Ptr doc, const Snapshot &snapshot, const Interpreter::Context *linkedContextNoScope);
     virtual ~Check();
 
     QList<DiagnosticMessage> operator()();
@@ -72,7 +71,6 @@ private:
     Snapshot _snapshot;
 
     Interpreter::Context _context;
-    Link _link;
     ScopeBuilder _scopeBuilder;
 
     QList<DiagnosticMessage> _messages;
diff --git a/src/plugins/qmljseditor/qmljseditor.cpp b/src/plugins/qmljseditor/qmljseditor.cpp
index 0336f31ea9b..34d691a3a6c 100644
--- a/src/plugins/qmljseditor/qmljseditor.cpp
+++ b/src/plugins/qmljseditor/qmljseditor.cpp
@@ -1892,12 +1892,13 @@ SemanticInfo SemanticHighlighter::semanticInfo(const Source &source)
     Interpreter::Context *ctx = new Interpreter::Context;
     Link link(ctx, doc, snapshot, ModelManagerInterface::instance()->importPaths());
     semanticInfo.m_context = QSharedPointer<const QmlJS::Interpreter::Context>(ctx);
+    semanticInfo.semanticMessages = link.diagnosticMessages();
 
     QStringList importPaths;
     if (m_modelManager)
         importPaths = m_modelManager->importPaths();
-    Check checker(doc, snapshot, importPaths);
-    semanticInfo.semanticMessages = checker();
+    Check checker(doc, snapshot, ctx);
+    semanticInfo.semanticMessages.append(checker());
 
     return semanticInfo;
 }
-- 
GitLab