diff options
author | Erik Verbruggen <erik.verbruggen@nokia.com> | 2010-03-17 14:18:32 +0100 |
---|---|---|
committer | Erik Verbruggen <erik.verbruggen@nokia.com> | 2010-03-17 14:20:17 +0100 |
commit | 284b8d38e2cba9a6bbfa95dd01b2fdb6cda29574 (patch) | |
tree | 2cedc13d8ed211b4ca4ec48ecb63ac1b196ad504 /src/plugins/cpptools/cppfindreferences.cpp | |
parent | 1cc5e1fe01d83ead385ec14411e744b6cd145c85 (diff) | |
download | qt-creator-284b8d38e2cba9a6bbfa95dd01b2fdb6cda29574.tar.gz |
Put the DependencyTable calculation into the QFuture.
Done-with: Roberto Raggi
Diffstat (limited to 'src/plugins/cpptools/cppfindreferences.cpp')
-rw-r--r-- | src/plugins/cpptools/cppfindreferences.cpp | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/src/plugins/cpptools/cppfindreferences.cpp b/src/plugins/cpptools/cppfindreferences.cpp index 3a034b0a85..97052e6a5e 100644 --- a/src/plugins/cpptools/cppfindreferences.cpp +++ b/src/plugins/cpptools/cppfindreferences.cpp @@ -54,6 +54,7 @@ #include <cplusplus/Overview.h> #include <QtCore/QTime> +#include <QtCore/QTimer> #include <QtCore/QtConcurrentRun> #include <QtCore/QtConcurrentMap> #include <QtCore/QDir> @@ -154,6 +155,14 @@ CppFindReferences::CppFindReferences(CppTools::CppModelManagerInterface *modelMa m_watcher.setPendingResultsLimit(1); connect(&m_watcher, SIGNAL(resultsReadyAt(int,int)), this, SLOT(displayResults(int,int))); connect(&m_watcher, SIGNAL(finished()), this, SLOT(searchFinished())); + + m_updateDependencyTableTimer = new QTimer(this); + m_updateDependencyTableTimer->setSingleShot(true); + m_updateDependencyTableTimer->setInterval(2000); + connect(m_updateDependencyTableTimer, SIGNAL(timeout()), + this, SLOT(updateDependencyTable())); + connect(modelManager, SIGNAL(documentUpdated(CPlusPlus::Document::Ptr)), + m_updateDependencyTableTimer, SLOT(start())); } CppFindReferences::~CppFindReferences() @@ -216,13 +225,20 @@ static void find_helper(QFutureInterface<Usage> &future, future.setProgressValue(files.size()); } -void CppFindReferences::updateDependencyTable(const Snapshot &snapshot) +static CPlusPlus::DependencyTable dependencyTable(DependencyTable previous, CPlusPlus::Snapshot snapshot) { - if (!m_deps.isValidFor(snapshot)) { - DependencyTable newDeps; - newDeps.build(snapshot); - m_deps = newDeps; - } + if (previous.isValidFor(snapshot)) + return previous; + + DependencyTable table; + table.build(snapshot); + return table; +} + +void CppFindReferences::updateDependencyTable() +{ + m_depsFuture.cancel(); + m_depsFuture = QtConcurrent::run(&dependencyTable, m_deps, _modelManager->snapshot()); } void CppFindReferences::findUsages(Document::Ptr symbolDocument, Symbol *symbol) @@ -265,7 +281,8 @@ void CppFindReferences::findAll_helper(Document::Ptr symbolDocument, Symbol *sym Core::ProgressManager *progressManager = Core::ICore::instance()->progressManager(); - updateDependencyTable(snapshot); + updateDependencyTable(); // ensure the dependency table is updated + m_deps = m_depsFuture; QFuture<Usage> result; @@ -424,7 +441,8 @@ void CppFindReferences::findMacroUses(const Macro ¯o) source.mid(macro.offset(), macro.length()), 0, macro.length()); } - updateDependencyTable(snapshot); + updateDependencyTable(); // ensure the dependency table is updated + m_deps = m_depsFuture; QFuture<Usage> result; result = QtConcurrent::run(&findMacroUses_helper, workingCopy, snapshot, m_deps, macro); |