diff options
Diffstat (limited to 'src/plugins/cppeditor/cppfindreferences.cpp')
-rw-r--r-- | src/plugins/cppeditor/cppfindreferences.cpp | 95 |
1 files changed, 45 insertions, 50 deletions
diff --git a/src/plugins/cppeditor/cppfindreferences.cpp b/src/plugins/cppeditor/cppfindreferences.cpp index 940eb358e93..5da22854386 100644 --- a/src/plugins/cppeditor/cppfindreferences.cpp +++ b/src/plugins/cppeditor/cppfindreferences.cpp @@ -10,25 +10,27 @@ #include "cpptoolsreuse.h" #include "cppworkingcopy.h" +#include <cplusplus/Overview.h> + #include <coreplugin/editormanager/editormanager.h> #include <coreplugin/icore.h> #include <coreplugin/progressmanager/futureprogress.h> #include <coreplugin/progressmanager/progressmanager.h> + #include <projectexplorer/projectexplorer.h> +#include <projectexplorer/projectmanager.h> #include <projectexplorer/projectnodes.h> #include <projectexplorer/projecttree.h> -#include <projectexplorer/session.h> + #include <texteditor/basefilefind.h> #include <utils/algorithm.h> +#include <utils/async.h> #include <utils/qtcassert.h> -#include <utils/runextensions.h> #include <utils/textfileformat.h> -#include <cplusplus/Overview.h> #include <QtConcurrentMap> #include <QCheckBox> -#include <QDir> #include <QFutureWatcher> #include <QVBoxLayout> @@ -103,8 +105,8 @@ namespace Internal { static QByteArray getSource(const Utils::FilePath &fileName, const WorkingCopy &workingCopy) { - if (workingCopy.contains(fileName)) { - return workingCopy.source(fileName); + if (const auto source = workingCopy.source(fileName)) { + return *source; } else { QString fileContents; Utils::TextFileFormat format; @@ -218,7 +220,7 @@ class ProcessFile const CPlusPlus::Snapshot snapshot; CPlusPlus::Document::Ptr symbolDocument; CPlusPlus::Symbol *symbol; - QFutureInterface<CPlusPlus::Usage> *future; + QPromise<CPlusPlus::Usage> *m_promise; const bool categorize; public: @@ -230,22 +232,21 @@ public: const CPlusPlus::Snapshot snapshot, CPlusPlus::Document::Ptr symbolDocument, CPlusPlus::Symbol *symbol, - QFutureInterface<CPlusPlus::Usage> *future, + QPromise<CPlusPlus::Usage> *promise, bool categorize) : workingCopy(workingCopy), snapshot(snapshot), symbolDocument(symbolDocument), symbol(symbol), - future(future), + m_promise(promise), categorize(categorize) { } QList<CPlusPlus::Usage> operator()(const Utils::FilePath &filePath) { QList<CPlusPlus::Usage> usages; - if (future->isPaused()) - future->waitForResume(); - if (future->isCanceled()) + m_promise->suspendIfRequested(); + if (m_promise->isCanceled()) return usages; const CPlusPlus::Identifier *symbolId = symbol->identifier(); @@ -275,25 +276,24 @@ public: usages = process.usages(); } - if (future->isPaused()) - future->waitForResume(); + m_promise->suspendIfRequested(); return usages; } }; class UpdateUI { - QFutureInterface<CPlusPlus::Usage> *future; + QPromise<CPlusPlus::Usage> *m_promise; public: - explicit UpdateUI(QFutureInterface<CPlusPlus::Usage> *future): future(future) {} + explicit UpdateUI(QPromise<CPlusPlus::Usage> *promise): m_promise(promise) {} void operator()(QList<CPlusPlus::Usage> &, const QList<CPlusPlus::Usage> &usages) { for (const CPlusPlus::Usage &u : usages) - future->reportResult(u); + m_promise->addResult(u); - future->setProgressValue(future->progressValue() + 1); + m_promise->setProgressValue(m_promise->future().progressValue() + 1); } }; @@ -319,7 +319,7 @@ QList<int> CppFindReferences::references(CPlusPlus::Symbol *symbol, return references; } -static void find_helper(QFutureInterface<CPlusPlus::Usage> &future, +static void find_helper(QPromise<CPlusPlus::Usage> &promise, const WorkingCopy workingCopy, const CPlusPlus::LookupContext &context, CPlusPlus::Symbol *symbol, @@ -353,16 +353,16 @@ static void find_helper(QFutureInterface<CPlusPlus::Usage> &future, } files = Utils::filteredUnique(files); - future.setProgressRange(0, files.size()); + promise.setProgressRange(0, files.size()); - ProcessFile process(workingCopy, snapshot, context.thisDocument(), symbol, &future, categorize); - UpdateUI reduce(&future); + ProcessFile process(workingCopy, snapshot, context.thisDocument(), symbol, &promise, categorize); + UpdateUI reduce(&promise); // This thread waits for blockingMappedReduced to finish, so reduce the pool's used thread count // so the blockingMappedReduced can use one more thread, and increase it again afterwards. QThreadPool::globalInstance()->releaseThread(); QtConcurrent::blockingMappedReduced<QList<CPlusPlus::Usage> > (files, process, reduce); QThreadPool::globalInstance()->reserveThread(); - future.setProgressValue(files.size()); + promise.setProgressValue(files.size()); } void CppFindReferences::findUsages(CPlusPlus::Symbol *symbol, @@ -437,7 +437,7 @@ void CppFindReferences::findAll_helper(SearchResult *search, CPlusPlus::Symbol * SearchResultWindow::instance()->popup(IOutputPane::ModeSwitch | IOutputPane::WithFocus); const WorkingCopy workingCopy = m_modelManager->workingCopy(); QFuture<CPlusPlus::Usage> result; - result = Utils::runAsync(m_modelManager->sharedThreadPool(), find_helper, + result = Utils::asyncRun(m_modelManager->sharedThreadPool(), find_helper, workingCopy, context, symbol, categorize); createWatcher(result, search); @@ -456,10 +456,8 @@ void CppFindReferences::setupSearch(Core::SearchResult *search) std::bind(&CppFindReferences::onReplaceButtonClicked, this, search, _1, _2, _3)); } -void CppFindReferences::onReplaceButtonClicked(Core::SearchResult *search, - const QString &text, - const QList<SearchResultItem> &items, - bool preserveCase) +void CppFindReferences::onReplaceButtonClicked(Core::SearchResult *search, const QString &text, + const SearchResultItems &items, bool preserveCase) { const Utils::FilePaths filePaths = TextEditor::BaseFileFind::replaceAll(text, items, preserveCase); if (!filePaths.isEmpty()) { @@ -577,7 +575,7 @@ static void displayResults(SearchResult *search, item.setStyle(colorStyleForUsageType(result.tags)); item.setUseTextEditorFont(true); if (search->supportsReplace()) - item.setSelectForReplacement(SessionManager::projectForFile(result.path)); + item.setSelectForReplacement(ProjectManager::projectForFile(result.path)); search->addResult(item); if (parameters.prettySymbolName.isEmpty()) @@ -586,7 +584,7 @@ static void displayResults(SearchResult *search, if (parameters.filesToRename.contains(result.path)) continue; - if (!SessionManager::projectForFile(result.path)) + if (!ProjectManager::projectForFile(result.path)) continue; if (result.path.baseName().compare(parameters.prettySymbolName, Qt::CaseInsensitive) == 0) @@ -623,7 +621,7 @@ class FindMacroUsesInFile const WorkingCopy workingCopy; const CPlusPlus::Snapshot snapshot; const CPlusPlus::Macro ¯o; - QFutureInterface<CPlusPlus::Usage> *future; + QPromise<CPlusPlus::Usage> *m_promise; public: // needed by QtConcurrent @@ -633,8 +631,8 @@ public: FindMacroUsesInFile(const WorkingCopy &workingCopy, const CPlusPlus::Snapshot snapshot, const CPlusPlus::Macro ¯o, - QFutureInterface<CPlusPlus::Usage> *future) - : workingCopy(workingCopy), snapshot(snapshot), macro(macro), future(future) + QPromise<CPlusPlus::Usage> *promise) + : workingCopy(workingCopy), snapshot(snapshot), macro(macro), m_promise(promise) { } QList<CPlusPlus::Usage> operator()(const Utils::FilePath &fileName) @@ -644,9 +642,8 @@ public: QByteArray source; restart_search: - if (future->isPaused()) - future->waitForResume(); - if (future->isCanceled()) + m_promise->suspendIfRequested(); + if (m_promise->isCanceled()) return usages; usages.clear(); @@ -674,8 +671,7 @@ restart_search: } } - if (future->isPaused()) - future->waitForResume(); + m_promise->suspendIfRequested(); return usages; } @@ -704,7 +700,7 @@ restart_search: } // end of anonymous namespace -static void findMacroUses_helper(QFutureInterface<CPlusPlus::Usage> &future, +static void findMacroUses_helper(QPromise<CPlusPlus::Usage> &promise, const WorkingCopy workingCopy, const CPlusPlus::Snapshot snapshot, const CPlusPlus::Macro macro) @@ -713,15 +709,15 @@ static void findMacroUses_helper(QFutureInterface<CPlusPlus::Usage> &future, FilePaths files{sourceFile}; files = Utils::filteredUnique(files + snapshot.filesDependingOn(sourceFile)); - future.setProgressRange(0, files.size()); - FindMacroUsesInFile process(workingCopy, snapshot, macro, &future); - UpdateUI reduce(&future); + promise.setProgressRange(0, files.size()); + FindMacroUsesInFile process(workingCopy, snapshot, macro, &promise); + UpdateUI reduce(&promise); // This thread waits for blockingMappedReduced to finish, so reduce the pool's used thread count // so the blockingMappedReduced can use one more thread, and increase it again afterwards. QThreadPool::globalInstance()->releaseThread(); QtConcurrent::blockingMappedReduced<QList<CPlusPlus::Usage> > (files, process, reduce); QThreadPool::globalInstance()->reserveThread(); - future.setProgressValue(files.size()); + promise.setProgressValue(files.size()); } void CppFindReferences::findMacroUses(const CPlusPlus::Macro ¯o) @@ -745,10 +741,9 @@ void CppFindReferences::findMacroUses(const CPlusPlus::Macro ¯o, const QStri setupSearch(search); SearchResultWindow::instance()->popup(IOutputPane::ModeSwitch | IOutputPane::WithFocus); - connect(search, &SearchResult::activated, - [](const Core::SearchResultItem& item) { - Core::EditorManager::openEditorAtSearchResult(item); - }); + connect(search, &SearchResult::activated, search, [](const SearchResultItem &item) { + Core::EditorManager::openEditorAtSearchResult(item); + }); const CPlusPlus::Snapshot snapshot = m_modelManager->snapshot(); const WorkingCopy workingCopy = m_modelManager->workingCopy(); @@ -766,12 +761,12 @@ void CppFindReferences::findMacroUses(const CPlusPlus::Macro ¯o, const QStri item.setMainRange(macro.line(), column, macro.nameToQString().length()); item.setUseTextEditorFont(true); if (search->supportsReplace()) - item.setSelectForReplacement(SessionManager::projectForFile(filePath)); + item.setSelectForReplacement(ProjectManager::projectForFile(filePath)); search->addResult(item); } QFuture<CPlusPlus::Usage> result; - result = Utils::runAsync(m_modelManager->sharedThreadPool(), findMacroUses_helper, + result = Utils::asyncRun(m_modelManager->sharedThreadPool(), findMacroUses_helper, workingCopy, snapshot, macro); createWatcher(result, search); @@ -832,7 +827,7 @@ void CppFindReferences::checkUnused(Core::SearchResult *search, const Link &link }); connect(search, &SearchResult::canceled, watcher, [watcher] { watcher->cancel(); }); connect(search, &SearchResult::destroyed, watcher, [watcher] { watcher->cancel(); }); - watcher->setFuture(Utils::runAsync(m_modelManager->sharedThreadPool(), find_helper, + watcher->setFuture(Utils::asyncRun(m_modelManager->sharedThreadPool(), find_helper, m_modelManager->workingCopy(), context, symbol, true)); } |