summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppfindreferences.cpp
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@nokia.com>2010-03-17 12:34:29 +0100
committerErik Verbruggen <erik.verbruggen@nokia.com>2010-03-17 14:20:17 +0100
commit1cc5e1fe01d83ead385ec14411e744b6cd145c85 (patch)
tree2756facd84b1919e59b70335634518beee1f09f0 /src/plugins/cpptools/cppfindreferences.cpp
parent6ed0cd5d32febfce07ae43d6d67624a46ce2fa82 (diff)
downloadqt-creator-1cc5e1fe01d83ead385ec14411e744b6cd145c85.tar.gz
Put the include depenency table into a separate class, and cache it when possible.
Diffstat (limited to 'src/plugins/cpptools/cppfindreferences.cpp')
-rw-r--r--src/plugins/cpptools/cppfindreferences.cpp23
1 files changed, 19 insertions, 4 deletions
diff --git a/src/plugins/cpptools/cppfindreferences.cpp b/src/plugins/cpptools/cppfindreferences.cpp
index e714fa28ab..3a034b0a85 100644
--- a/src/plugins/cpptools/cppfindreferences.cpp
+++ b/src/plugins/cpptools/cppfindreferences.cpp
@@ -178,6 +178,7 @@ static void find_helper(QFutureInterface<Usage> &future,
const CppTools::CppModelManagerInterface::WorkingCopy workingCopy,
Snapshot snapshot,
Document::Ptr symbolDocument,
+ DependencyTable dependencyTable,
Symbol *symbol)
{
QTime tm;
@@ -200,7 +201,7 @@ static void find_helper(QFutureInterface<Usage> &future,
files.append(doc->fileName());
}
} else {
- files += snapshot.filesDependingOn(sourceFile);
+ files += dependencyTable.filesDependingOn(sourceFile);
}
files.removeDuplicates();
//qDebug() << "done in:" << tm.elapsed() << "number of files to parse:" << files.size();
@@ -215,6 +216,15 @@ static void find_helper(QFutureInterface<Usage> &future,
future.setProgressValue(files.size());
}
+void CppFindReferences::updateDependencyTable(const Snapshot &snapshot)
+{
+ if (!m_deps.isValidFor(snapshot)) {
+ DependencyTable newDeps;
+ newDeps.build(snapshot);
+ m_deps = newDeps;
+ }
+}
+
void CppFindReferences::findUsages(Document::Ptr symbolDocument, Symbol *symbol)
{
Find::SearchResult *search = _resultWindow->startNewSearch(Find::SearchResultWindow::SearchOnly);
@@ -255,9 +265,11 @@ void CppFindReferences::findAll_helper(Document::Ptr symbolDocument, Symbol *sym
Core::ProgressManager *progressManager = Core::ICore::instance()->progressManager();
+ updateDependencyTable(snapshot);
+
QFuture<Usage> result;
- result = QtConcurrent::run(&find_helper, workingCopy, snapshot, symbolDocument, symbol);
+ result = QtConcurrent::run(&find_helper, workingCopy, snapshot, symbolDocument, m_deps, symbol);
m_watcher.setFuture(result);
Core::FutureProgress *progress = progressManager->addTask(result, tr("Searching..."),
@@ -375,11 +387,12 @@ public:
static void findMacroUses_helper(QFutureInterface<Usage> &future,
const CppTools::CppModelManagerInterface::WorkingCopy workingCopy,
const Snapshot snapshot,
+ DependencyTable dependencyTable,
const Macro macro)
{
const QString& sourceFile = macro.fileName();
QStringList files(sourceFile);
- files += snapshot.filesDependingOn(sourceFile);
+ files += dependencyTable.filesDependingOn(sourceFile);
files.removeDuplicates();
future.setProgressRange(0, files.size());
@@ -411,8 +424,10 @@ void CppFindReferences::findMacroUses(const Macro &macro)
source.mid(macro.offset(), macro.length()), 0, macro.length());
}
+ updateDependencyTable(snapshot);
+
QFuture<Usage> result;
- result = QtConcurrent::run(&findMacroUses_helper, workingCopy, snapshot, macro);
+ result = QtConcurrent::run(&findMacroUses_helper, workingCopy, snapshot, m_deps, macro);
m_watcher.setFuture(result);
Core::ProgressManager *progressManager = Core::ICore::instance()->progressManager();