forked from qt-creator/qt-creator
Put the include depenency table into a separate class, and cache it when possible.
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
#include <QtCore/QFutureWatcher>
|
||||
#include <utils/filesearch.h>
|
||||
#include <cplusplus/CppDocument.h>
|
||||
#include <cplusplus/DependencyTable.h>
|
||||
#include <cplusplus/FindUsages.h>
|
||||
|
||||
namespace Find {
|
||||
@@ -77,11 +78,13 @@ private Q_SLOTS:
|
||||
|
||||
private:
|
||||
void findAll_helper(CPlusPlus::Document::Ptr symbolDocument, CPlusPlus::Symbol *symbol);
|
||||
void updateDependencyTable(const CPlusPlus::Snapshot &snapshot);
|
||||
|
||||
private:
|
||||
QPointer<CppModelManagerInterface> _modelManager;
|
||||
Find::SearchResultWindow *_resultWindow;
|
||||
QFutureWatcher<CPlusPlus::Usage> m_watcher;
|
||||
CPlusPlus::DependencyTable m_deps;
|
||||
};
|
||||
|
||||
} // end of namespace Internal
|
||||
|
||||
Reference in New Issue
Block a user