summaryrefslogtreecommitdiff
path: root/src/plugins/cpptools/cppfindreferences.cpp
diff options
context:
space:
mode:
authorChristian Kandeler <christian.kandeler@qt.io>2021-05-26 17:24:18 +0200
committerChristian Kandeler <christian.kandeler@qt.io>2021-06-07 08:28:49 +0000
commita5ba33cbeb07f40b2567f57aeeac2ecac6929fd4 (patch)
tree8b7afc0fdc61bed187d68eb8ab2347c67bc44f29 /src/plugins/cpptools/cppfindreferences.cpp
parenta09851ff1ff49b59228d7a6f99285f0dfcb231d6 (diff)
downloadqt-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.cpp28
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 {