diff options
Diffstat (limited to 'src/plugins/cpptools/cppfindreferences.cpp')
-rw-r--r-- | src/plugins/cpptools/cppfindreferences.cpp | 23 |
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 ¯o) 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(); |