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