From d5c2dedd8a9d60addc565292bafba236c86dd666 Mon Sep 17 00:00:00 2001
From: Roberto Raggi <roberto.raggi@nokia.com>
Date: Tue, 1 Dec 2009 17:31:41 +0100
Subject: [PATCH] Save the usages.

---
 src/libs/cplusplus/FindUsages.cpp          | 18 +++++++++++++-----
 src/libs/cplusplus/FindUsages.h            | 10 +++++++---
 src/plugins/cpptools/cppfindreferences.cpp | 12 ++++++++----
 3 files changed, 28 insertions(+), 12 deletions(-)

diff --git a/src/libs/cplusplus/FindUsages.cpp b/src/libs/cplusplus/FindUsages.cpp
index bc9175740f8..0d48bb0d7a3 100644
--- a/src/libs/cplusplus/FindUsages.cpp
+++ b/src/libs/cplusplus/FindUsages.cpp
@@ -57,17 +57,23 @@ void FindUsages::setGlobalNamespaceBinding(NamespaceBindingPtr globalNamespaceBi
     _globalNamespaceBinding = globalNamespaceBinding;
 }
 
-QList<int> FindUsages::operator()(Symbol *symbol, const Identifier *id, AST *ast)
+QList<Usage> FindUsages::usages() const
+{ return _usages; }
+
+QList<int> FindUsages::references() const
+{ return _references; }
+
+void FindUsages::operator()(Symbol *symbol, const Identifier *id, AST *ast)
 {
     _processed.clear();
     _references.clear();
+    _usages.clear();
     _declSymbol = symbol;
     _id = id;
     if (_declSymbol && _id) {
         _exprDoc = Document::create("<references>");
         accept(ast);
     }
-    return _references;
 }
 
 QString FindUsages::matchingLine(const Token &tk) const
@@ -120,9 +126,11 @@ void FindUsages::reportResult(unsigned tokenIndex)
 
     const int len = tk.f.length;
 
-    if (_future) {
-        _future->reportResult(Usage(_doc->fileName(), line, lineText, col, len));
-    }
+    const Usage u(_doc->fileName(), line, lineText, col, len);
+    _usages.append(u);
+
+    if (_future)
+        _future->reportResult(u);
 
     _references.append(tokenIndex);
 }
diff --git a/src/libs/cplusplus/FindUsages.h b/src/libs/cplusplus/FindUsages.h
index 4109a252df1..4b09e1502e1 100644
--- a/src/libs/cplusplus/FindUsages.h
+++ b/src/libs/cplusplus/FindUsages.h
@@ -47,12 +47,12 @@ public:
         : line(0), col(0), len(0) {}
 
     Usage(const QString &path, int line, const QString &lineText, int col, int len)
-        : path(path), line(line), lineText(lineText), col(col), len(len) {}
+        : path(path), lineText(lineText), line(line), col(col), len(len) {}
 
 public:
     QString path;
-    int line;
     QString lineText;
+    int line;
     int col;
     int len;
 };
@@ -64,7 +64,10 @@ public:
 
     void setGlobalNamespaceBinding(NamespaceBindingPtr globalNamespaceBinding);
 
-    QList<int> operator()(Symbol *symbol, const Identifier *id, AST *ast);
+    void operator()(Symbol *symbol, const Identifier *id, AST *ast);
+
+    QList<Usage> usages() const;
+    QList<int> references() const;
 
 protected:
     using ASTVisitor::visit;
@@ -112,6 +115,7 @@ private:
     QList<PostfixExpressionAST *> _postfixExpressionStack;
     QList<QualifiedNameAST *> _qualifiedNameStack;
     QList<int> _references;
+    QList<Usage> _usages;
     LookupContext _previousContext;
     int _inSimpleDeclaration;
     QSet<unsigned> _processed;
diff --git a/src/plugins/cpptools/cppfindreferences.cpp b/src/plugins/cpptools/cppfindreferences.cpp
index 6a586c9dec8..3a83089c4d5 100644
--- a/src/plugins/cpptools/cppfindreferences.cpp
+++ b/src/plugins/cpptools/cppfindreferences.cpp
@@ -91,9 +91,10 @@ QList<int> CppFindReferences::references(Symbol *symbol,
     TranslationUnit *translationUnit = doc->translationUnit();
     Q_ASSERT(translationUnit != 0);
 
-    FindUsages process(doc, snapshot, /*future = */ 0);
-    process.setGlobalNamespaceBinding(bind(doc, snapshot));
-    references = process(symbol, id, translationUnit->ast());
+    FindUsages findUsages(doc, snapshot, /*future = */ 0);
+    findUsages.setGlobalNamespaceBinding(bind(doc, snapshot));
+    findUsages(symbol, id, translationUnit->ast());
+    references = findUsages.references();
 
     return references;
 }
@@ -229,7 +230,10 @@ void CppFindReferences::findAll_helper(Symbol *symbol)
     const QMap<QString, QString> wl = _modelManager->workingCopy();
 
     Core::ProgressManager *progressManager = Core::ICore::instance()->progressManager();
-    QFuture<Usage> result = QtConcurrent::run(&find_helper, wl, snapshot, symbol);
+
+    QFuture<Usage> result;
+
+    result = QtConcurrent::run(&find_helper, wl, snapshot, symbol);
     m_watcher.setFuture(result);
 
     Core::FutureProgress *progress = progressManager->addTask(result, tr("Searching..."),
-- 
GitLab