diff options
author | Christian Kandeler <christian.kandeler@qt.io> | 2021-05-26 17:24:18 +0200 |
---|---|---|
committer | Christian Kandeler <christian.kandeler@qt.io> | 2021-06-07 08:28:49 +0000 |
commit | a5ba33cbeb07f40b2567f57aeeac2ecac6929fd4 (patch) | |
tree | 8b7afc0fdc61bed187d68eb8ab2347c67bc44f29 /src/plugins/cpptools/cppfindreferences.cpp | |
parent | a09851ff1ff49b59228d7a6f99285f0dfcb231d6 (diff) | |
download | qt-creator-a5ba33cbeb07f40b2567f57aeeac2ecac6929fd4.tar.gz |
CppEditor: Add second "Find References" Action
This one includes access type categorization, while the "normal" one
does not.
We need this now, because with clangd, the categorization is too slow to
enable it by default.
Change-Id: I2eb4608630d34452ae28f0836befd5d9053f42bf
Reviewed-by: David Schulz <david.schulz@qt.io>
Diffstat (limited to 'src/plugins/cpptools/cppfindreferences.cpp')
-rw-r--r-- | src/plugins/cpptools/cppfindreferences.cpp | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/src/plugins/cpptools/cppfindreferences.cpp b/src/plugins/cpptools/cppfindreferences.cpp index e93fc545ea..fe086548be 100644 --- a/src/plugins/cpptools/cppfindreferences.cpp +++ b/src/plugins/cpptools/cppfindreferences.cpp @@ -25,9 +25,11 @@ #include "cppfindreferences.h" +#include "cppcodemodelsettings.h" #include "cppfilesettingspage.h" #include "cpptoolsconstants.h" #include "cppmodelmanager.h" +#include "cpptoolsreuse.h" #include "cppworkingcopy.h" #include <coreplugin/editormanager/editormanager.h> @@ -295,6 +297,7 @@ class ProcessFile CPlusPlus::Document::Ptr symbolDocument; CPlusPlus::Symbol *symbol; QFutureInterface<CPlusPlus::Usage> *future; + const bool categorize; public: // needed by QtConcurrent @@ -305,12 +308,14 @@ public: const CPlusPlus::Snapshot snapshot, CPlusPlus::Document::Ptr symbolDocument, CPlusPlus::Symbol *symbol, - QFutureInterface<CPlusPlus::Usage> *future) + QFutureInterface<CPlusPlus::Usage> *future, + bool categorize) : workingCopy(workingCopy), snapshot(snapshot), symbolDocument(symbolDocument), symbol(symbol), - future(future) + future(future), + categorize(categorize) { } QList<CPlusPlus::Usage> operator()(const Utils::FilePath &fileName) @@ -342,7 +347,7 @@ public: if (doc != symbolDocument) doc->check(); - CPlusPlus::FindUsages process(unpreprocessedSource, doc, snapshot); + CPlusPlus::FindUsages process(unpreprocessedSource, doc, snapshot, categorize); process(symbol); usages = process.usages(); @@ -395,7 +400,8 @@ QList<int> CppFindReferences::references(CPlusPlus::Symbol *symbol, static void find_helper(QFutureInterface<CPlusPlus::Usage> &future, const WorkingCopy workingCopy, const CPlusPlus::LookupContext &context, - CPlusPlus::Symbol *symbol) + CPlusPlus::Symbol *symbol, + bool categorize) { const CPlusPlus::Identifier *symbolId = symbol->identifier(); QTC_ASSERT(symbolId != nullptr, return); @@ -428,7 +434,7 @@ static void find_helper(QFutureInterface<CPlusPlus::Usage> &future, future.setProgressRange(0, files.size()); - ProcessFile process(workingCopy, snapshot, context.thisDocument(), symbol, &future); + ProcessFile process(workingCopy, snapshot, context.thisDocument(), symbol, &future, categorize); UpdateUI reduce(&future); // 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. @@ -458,7 +464,8 @@ void CppFindReferences::findUsages(CPlusPlus::Symbol *symbol, SearchResultWindow::PreserveCaseDisabled, QLatin1String("CppEditor")); search->setTextToReplace(replacement); - search->setFilter(new CppSearchResultFilter); + if (codeModelSettings()->categorizeFindReferences()) + search->setFilter(new CppSearchResultFilter); auto renameFilesCheckBox = new QCheckBox(); renameFilesCheckBox->setVisible(false); search->setAdditionalReplaceWidget(renameFilesCheckBox); @@ -469,6 +476,7 @@ void CppFindReferences::findUsages(CPlusPlus::Symbol *symbol, CppFindReferencesParameters parameters; parameters.symbolId = fullIdForSymbol(symbol); parameters.symbolFileName = QByteArray(symbol->fileName()); + parameters.categorize = codeModelSettings()->categorizeFindReferences(); if (symbol->isClass() || symbol->isForwardClassDeclaration()) { CPlusPlus::Overview overview; @@ -477,7 +485,7 @@ void CppFindReferences::findUsages(CPlusPlus::Symbol *symbol, } search->setUserData(QVariant::fromValue(parameters)); - findAll_helper(search, symbol, context); + findAll_helper(search, symbol, context, codeModelSettings()->categorizeFindReferences()); } void CppFindReferences::renameUsages(CPlusPlus::Symbol *symbol, @@ -492,7 +500,7 @@ void CppFindReferences::renameUsages(CPlusPlus::Symbol *symbol, } void CppFindReferences::findAll_helper(SearchResult *search, CPlusPlus::Symbol *symbol, - const CPlusPlus::LookupContext &context) + const CPlusPlus::LookupContext &context, bool categorize) { if (!(symbol && symbol->identifier())) { search->finishSearch(false); @@ -507,7 +515,7 @@ void CppFindReferences::findAll_helper(SearchResult *search, CPlusPlus::Symbol * const WorkingCopy workingCopy = m_modelManager->workingCopy(); QFuture<CPlusPlus::Usage> result; result = Utils::runAsync(m_modelManager->sharedThreadPool(), find_helper, - workingCopy, context, symbol); + workingCopy, context, symbol, categorize); createWatcher(result, search); FutureProgress *progress = ProgressManager::addTask(result, tr("Searching for Usages"), @@ -553,7 +561,7 @@ void CppFindReferences::searchAgain() search->finishSearch(false); return; } - findAll_helper(search, symbol, context); + findAll_helper(search, symbol, context, parameters.categorize); } namespace { |