From 6ea5fdcded88c8bf67ead461a3f392e260aca37a Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@nokia.com>
Date: Mon, 7 Sep 2009 13:40:13 +0200
Subject: [PATCH] Speed up the search of a reference to a name.

---
 src/plugins/cpptools/cppfindreferences.cpp | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/src/plugins/cpptools/cppfindreferences.cpp b/src/plugins/cpptools/cppfindreferences.cpp
index ccc26d08812..adae87a67bf 100644
--- a/src/plugins/cpptools/cppfindreferences.cpp
+++ b/src/plugins/cpptools/cppfindreferences.cpp
@@ -223,6 +223,8 @@ static void find_helper(QFutureInterface<Core::Utils::FileSearchResult> &future,
 
     future.setProgressRange(0, files.size());
 
+    const QByteArray literal = word.toLatin1();
+
     tm.start();
     for (int i = 0; i < files.size(); ++i) {
         const QString &fn = files.at(i);
@@ -234,14 +236,15 @@ static void find_helper(QFutureInterface<Core::Utils::FileSearchResult> &future,
         const QString source = QTextStream(&f).readAll();
         const QByteArray preprocessedCode = snapshot.preprocessedCode(source, fn);
         Document::Ptr doc = snapshot.documentFromSource(preprocessedCode, fn);
-        doc->check();
+        doc->tokenize();
 
         Control *control = doc->control();
-        Identifier *id = control->findOrInsertIdentifier(word.toLatin1().constData());
-
-        TranslationUnit *unit = doc->translationUnit();
-        Process process(future, doc, snapshot);
-        process(id, unit->ast());
+        if (Identifier *id = control->findIdentifier(literal.constData(), literal.size())) {
+            doc->check();
+            TranslationUnit *unit = doc->translationUnit();
+            Process process(future, doc, snapshot);
+            process(id, unit->ast());
+        }
     }
     future.setProgressValue(files.size());
 }
-- 
GitLab