From 86e21bc255fdc883e3094e7abb32764d6ac8678c Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@nokia.com>
Date: Tue, 29 Sep 2009 13:42:47 +0200
Subject: [PATCH] Look at the working copy when searching for references.

---
 src/plugins/cpptools/cppfindreferences.cpp | 27 +++++++++++++++++-----
 src/plugins/cpptools/cppfindreferences.h   |  2 +-
 src/plugins/cpptools/cppmodelmanager.cpp   |  2 +-
 3 files changed, 23 insertions(+), 8 deletions(-)

diff --git a/src/plugins/cpptools/cppfindreferences.cpp b/src/plugins/cpptools/cppfindreferences.cpp
index 66d9fbcc2fe..355f2bf61a8 100644
--- a/src/plugins/cpptools/cppfindreferences.cpp
+++ b/src/plugins/cpptools/cppfindreferences.cpp
@@ -322,6 +322,7 @@ CppFindReferences::~CppFindReferences()
 }
 
 static void find_helper(QFutureInterface<Core::Utils::FileSearchResult> &future,
+                        const QMap<QString, QString> wl,
                         Snapshot snapshot,
                         Symbol *symbol)
 {
@@ -339,7 +340,6 @@ static void find_helper(QFutureInterface<Core::Utils::FileSearchResult> &future,
 
     future.setProgressRange(0, files.size());
 
-    tm.start();
     for (int i = 0; i < files.size(); ++i) {
         const QString &fn = files.at(i);
         future.setProgressValueAndText(i, QFileInfo(fn).fileName());
@@ -356,9 +356,20 @@ static void find_helper(QFutureInterface<Core::Utils::FileSearchResult> &future,
         if (! f.open(QFile::ReadOnly))
             continue;
 
-        const QString source = QTextStream(&f).readAll(); // ### FIXME
-        const QByteArray preprocessedCode = snapshot.preprocessedCode(source, fn);
-        Document::Ptr doc = snapshot.documentFromSource(preprocessedCode, fn);
+        QByteArray source;
+
+        if (wl.contains(fileName))
+            source = snapshot.preprocessedCode(wl.value(fileName), fileName);
+        else {
+            QFile file(fileName);
+            if (! file.open(QFile::ReadOnly))
+                continue;
+
+            const QString contents = QTextStream(&file).readAll(); // ### FIXME
+            source = snapshot.preprocessedCode(contents, fileName);
+        }
+
+        Document::Ptr doc = snapshot.documentFromSource(source, fileName);
         doc->tokenize();
 
         Control *control = doc->control();
@@ -369,17 +380,21 @@ static void find_helper(QFutureInterface<Core::Utils::FileSearchResult> &future,
             process(symbol, id, unit->ast());
         }
     }
+
     future.setProgressValue(files.size());
 }
 
-void CppFindReferences::findAll(const Snapshot &snapshot, Symbol *symbol)
+void CppFindReferences::findAll(Symbol *symbol)
 {
     _resultWindow->clearContents();
     _resultWindow->popup(true);
 
+    const Snapshot snapshot = _modelManager->snapshot();
+    const QMap<QString, QString> wl = _modelManager->buildWorkingCopyList();
+
     Core::ProgressManager *progressManager = Core::ICore::instance()->progressManager();
 
-    QFuture<Core::Utils::FileSearchResult> result = QtConcurrent::run(&find_helper, snapshot, symbol);
+    QFuture<Core::Utils::FileSearchResult> result = QtConcurrent::run(&find_helper, wl, snapshot, symbol);
     m_watcher.setFuture(result);
 
     Core::FutureProgress *progress = progressManager->addTask(result, tr("Searching..."),
diff --git a/src/plugins/cpptools/cppfindreferences.h b/src/plugins/cpptools/cppfindreferences.h
index 65f48d36196..9b5ddfccb46 100644
--- a/src/plugins/cpptools/cppfindreferences.h
+++ b/src/plugins/cpptools/cppfindreferences.h
@@ -62,7 +62,7 @@ Q_SIGNALS:
     void changed();
 
 public:
-    void findAll(const CPlusPlus::Snapshot &snapshot, CPlusPlus::Symbol *symbol);
+    void findAll(CPlusPlus::Symbol *symbol);
 
 private Q_SLOTS:
     void displayResult(int);
diff --git a/src/plugins/cpptools/cppmodelmanager.cpp b/src/plugins/cpptools/cppmodelmanager.cpp
index 6a859d16cc7..aa3d9777eed 100644
--- a/src/plugins/cpptools/cppmodelmanager.cpp
+++ b/src/plugins/cpptools/cppmodelmanager.cpp
@@ -742,7 +742,7 @@ void CppModelManager::removeEditorSupport(AbstractEditorSupport *editorSupport)
 void CppModelManager::findReferences(CPlusPlus::Symbol *symbol)
 {
     if (symbol->identifier())
-        m_findReferences->findAll(snapshot(), symbol);
+        m_findReferences->findAll(symbol);
 }
 
 QMap<QString, QString> CppModelManager::buildWorkingCopyList()
-- 
GitLab