diff --git a/src/plugins/cpptools/cppfindreferences.cpp b/src/plugins/cpptools/cppfindreferences.cpp index 6a6a048da7243cb37dd3cd542de80fbea4b170f5..ef442e45d492dee18b208aebdc45c6cf4df01e6b 100644 --- a/src/plugins/cpptools/cppfindreferences.cpp +++ b/src/plugins/cpptools/cppfindreferences.cpp @@ -157,6 +157,8 @@ CppFindReferences::CppFindReferences(CppTools::CppModelManagerInterface *modelMa connect(&m_watcher, SIGNAL(resultsReadyAt(int,int)), this, SLOT(displayResults(int,int))); connect(&m_watcher, SIGNAL(finished()), this, SLOT(searchFinished())); + connect(&m_watchDependencyTable, SIGNAL(finished()), this, SLOT(dependencyTableUpdated())); + m_updateDependencyTableTimer = new QTimer(this); m_updateDependencyTableTimer->setSingleShot(true); m_updateDependencyTableTimer->setInterval(2000); @@ -188,11 +190,10 @@ static void find_helper(QFutureInterface<Usage> &future, const CppTools::CppModelManagerInterface::WorkingCopy workingCopy, Snapshot snapshot, Document::Ptr symbolDocument, - DependencyTable dependencyTable, + QFuture<DependencyTable> dependencyTableFuture, Symbol *symbol) { - QTime tm; - tm.start(); + const DependencyTable dependencyTable = dependencyTableFuture; const Identifier *symbolId = symbol->identifier(); Q_ASSERT(symbolId != 0); @@ -226,7 +227,7 @@ static void find_helper(QFutureInterface<Usage> &future, future.setProgressValue(files.size()); } -static CPlusPlus::DependencyTable dependencyTable(DependencyTable previous, CPlusPlus::Snapshot snapshot) +static CPlusPlus::DependencyTable dependencyTable_helper(DependencyTable previous, CPlusPlus::Snapshot snapshot) { if (previous.isValidFor(snapshot)) return previous; @@ -238,8 +239,14 @@ static CPlusPlus::DependencyTable dependencyTable(DependencyTable previous, CPlu void CppFindReferences::updateDependencyTable() { - m_depsFuture.cancel(); - m_depsFuture = QtConcurrent::run(&dependencyTable, m_deps, _modelManager->snapshot()); + m_dependencyTableFuture.cancel(); + m_dependencyTableFuture = QtConcurrent::run(&dependencyTable_helper, m_deps, _modelManager->snapshot()); + m_watchDependencyTable.setFuture(m_dependencyTableFuture); +} + +void CppFindReferences::dependencyTableUpdated() +{ + m_deps = m_dependencyTableFuture; } void CppFindReferences::findUsages(Document::Ptr symbolDocument, Symbol *symbol) @@ -283,11 +290,10 @@ void CppFindReferences::findAll_helper(Document::Ptr symbolDocument, Symbol *sym Core::ProgressManager *progressManager = Core::ICore::instance()->progressManager(); updateDependencyTable(); // ensure the dependency table is updated - m_deps = m_depsFuture; QFuture<Usage> result; - result = QtConcurrent::run(&find_helper, workingCopy, snapshot, symbolDocument, m_deps, symbol); + result = QtConcurrent::run(&find_helper, workingCopy, snapshot, symbolDocument, m_dependencyTableFuture, symbol); m_watcher.setFuture(result); Core::FutureProgress *progress = progressManager->addTask(result, tr("Searching"), @@ -405,9 +411,10 @@ public: static void findMacroUses_helper(QFutureInterface<Usage> &future, const CppTools::CppModelManagerInterface::WorkingCopy workingCopy, const Snapshot snapshot, - DependencyTable dependencyTable, + QFuture<DependencyTable> dependencyTableFuture, const Macro macro) { + const DependencyTable dependencyTable = dependencyTableFuture; const QString& sourceFile = macro.fileName(); QStringList files(sourceFile); files += dependencyTable.filesDependingOn(sourceFile); @@ -443,10 +450,9 @@ void CppFindReferences::findMacroUses(const Macro ¯o) } updateDependencyTable(); // ensure the dependency table is updated - m_deps = m_depsFuture; QFuture<Usage> result; - result = QtConcurrent::run(&findMacroUses_helper, workingCopy, snapshot, m_deps, macro); + result = QtConcurrent::run(&findMacroUses_helper, workingCopy, snapshot, m_dependencyTableFuture, macro); m_watcher.setFuture(result); Core::ProgressManager *progressManager = Core::ICore::instance()->progressManager(); diff --git a/src/plugins/cpptools/cppfindreferences.h b/src/plugins/cpptools/cppfindreferences.h index f37d2b6643d0fac5338c930b979533d743089667..2f53ac5e3edc23cbeadd759cb43296fc15097821 100644 --- a/src/plugins/cpptools/cppfindreferences.h +++ b/src/plugins/cpptools/cppfindreferences.h @@ -78,6 +78,7 @@ private Q_SLOTS: void openEditor(const Find::SearchResultItem &item); void onReplaceButtonClicked(const QString &text, const QList<Find::SearchResultItem> &items); void updateDependencyTable(); + void dependencyTableUpdated(); private: void findAll_helper(CPlusPlus::Document::Ptr symbolDocument, CPlusPlus::Symbol *symbol); @@ -86,8 +87,9 @@ private: QPointer<CppModelManagerInterface> _modelManager; Find::SearchResultWindow *_resultWindow; QFutureWatcher<CPlusPlus::Usage> m_watcher; + QFutureWatcher<CPlusPlus::DependencyTable> m_watchDependencyTable; CPlusPlus::DependencyTable m_deps; - QFuture<CPlusPlus::DependencyTable> m_depsFuture; + QFuture<CPlusPlus::DependencyTable> m_dependencyTableFuture; QTimer *m_updateDependencyTableTimer; };