summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppfindreferences.cpp
diff options
context:
space:
mode:
authorErik Verbruggen <erik.verbruggen@nokia.com>2010-03-17 14:18:32 +0100
committerErik Verbruggen <erik.verbruggen@nokia.com>2010-03-17 14:20:17 +0100
commit284b8d38e2cba9a6bbfa95dd01b2fdb6cda29574 (patch)
tree2cedc13d8ed211b4ca4ec48ecb63ac1b196ad504 /src/plugins/cpptools/cppfindreferences.cpp
parent1cc5e1fe01d83ead385ec14411e744b6cd145c85 (diff)
downloadqt-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.cpp34
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 &macro)
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);