From 99b5d93cfb1a4a71290dda280ad290c99ac5fa9c Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Tue, 11 Apr 2023 15:02:36 +0200 Subject: [PATCH] LocatorMatcher: Introduce MatcherType enum Use it for registering/getting different kinds of matchers. Change-Id: I6f944e0332bf8c512892a00b8ba88f9939f34682 Reviewed-by: Qt CI Bot Reviewed-by: Christian Kandeler Reviewed-by: --- .../clangmodelmanagersupport.cpp | 8 ++-- .../coreplugin/locator/ilocatorfilter.cpp | 38 +++---------------- .../coreplugin/locator/ilocatorfilter.h | 15 ++++---- src/plugins/cppeditor/cpplocatorfilter.cpp | 2 +- src/plugins/cppeditor/cpplocatorfilter.h | 2 +- .../cppeditor/cpplocatorfilter_test.cpp | 35 ++++++++--------- src/plugins/cppeditor/cppmodelmanager.cpp | 11 ++++-- src/plugins/languageclient/locatorfilter.cpp | 2 +- src/plugins/languageclient/locatorfilter.h | 4 +- .../jsonwizard/jsonfieldpage.cpp | 2 +- 10 files changed, 46 insertions(+), 73 deletions(-) diff --git a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp index 43b41e54f9b..40619bc8ed1 100644 --- a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp +++ b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp @@ -214,11 +214,11 @@ ClangModelManagerSupport::ClangModelManagerSupport() matchers << creator(client, 10000); return matchers; }; - LocatorMatcher::addLocatorMatcherCreator( - [matcherCreator] { return matcherCreator(&LanguageClient::workspaceLocatorMatcher); }); - LocatorMatcher::addClassMatcherCreator( + LocatorMatcher::addMatcherCreator(MatcherType::AllSymbols, + [matcherCreator] { return matcherCreator(&LanguageClient::workspaceAllSymbolsMatcher); }); + LocatorMatcher::addMatcherCreator(MatcherType::Classes, [matcherCreator] { return matcherCreator(&LanguageClient::workspaceClassMatcher); }); - LocatorMatcher::addFunctionMatcherCreator( + LocatorMatcher::addMatcherCreator(MatcherType::Functions, [matcherCreator] { return matcherCreator(&LanguageClient::workspaceFunctionMatcher); }); EditorManager *editorManager = EditorManager::instance(); diff --git a/src/plugins/coreplugin/locator/ilocatorfilter.cpp b/src/plugins/coreplugin/locator/ilocatorfilter.cpp index bd68d602f1f..8b7c924a2ff 100644 --- a/src/plugins/coreplugin/locator/ilocatorfilter.cpp +++ b/src/plugins/coreplugin/locator/ilocatorfilter.cpp @@ -427,51 +427,23 @@ LocatorMatcherTask::OutputData LocatorMatcher::runBlocking(const QList s_locatorMatcherCreators = {}; -static QList s_classMatcherCreators = {}; -static QList s_functionMatcherCreators = {}; +static QHash> s_matcherCreators = {}; -void LocatorMatcher::addLocatorMatcherCreator(const LocatorMatcherTaskCreator &creator) +void LocatorMatcher::addMatcherCreator(MatcherType type, const LocatorMatcherTaskCreator &creator) { QTC_ASSERT(creator, return); - s_locatorMatcherCreators.append(creator); + s_matcherCreators[type].append(creator); } -void LocatorMatcher::addClassMatcherCreator(const LocatorMatcherTaskCreator &creator) -{ - QTC_ASSERT(creator, return); - s_classMatcherCreators.append(creator); -} - -void LocatorMatcher::addFunctionMatcherCreator(const LocatorMatcherTaskCreator &creator) -{ - QTC_ASSERT(creator, return); - s_functionMatcherCreators.append(creator); -} - -static QList matchers(const QList &creators) +QList LocatorMatcher::matchers(MatcherType type) { + const QList creators = s_matcherCreators.value(type); QList result; for (const LocatorMatcherTaskCreator &creator : creators) result << creator(); return result; } -QList LocatorMatcher::locatorMatchers() -{ - return matchers(s_locatorMatcherCreators); -} - -QList LocatorMatcher::classMatchers() -{ - return matchers(s_classMatcherCreators); -} - -QList LocatorMatcher::functionMatchers() -{ - return matchers(s_functionMatcherCreators); -} - static QList g_locatorFilters; /*! diff --git a/src/plugins/coreplugin/locator/ilocatorfilter.h b/src/plugins/coreplugin/locator/ilocatorfilter.h index bf94650443d..848321daaf1 100644 --- a/src/plugins/coreplugin/locator/ilocatorfilter.h +++ b/src/plugins/coreplugin/locator/ilocatorfilter.h @@ -145,6 +145,12 @@ public: using LocatorMatcherTaskCreator = std::function()>; class LocatorMatcherPrivate; +enum class MatcherType { + AllSymbols, + Classes, + Functions +}; + class CORE_EXPORT LocatorMatcher final : public QObject { Q_OBJECT @@ -167,13 +173,8 @@ public: const LocatorMatcherTask::InputData &input, int parallelLimit = 0); - static void addLocatorMatcherCreator(const LocatorMatcherTaskCreator &creator); - static void addClassMatcherCreator(const LocatorMatcherTaskCreator &creator); - static void addFunctionMatcherCreator(const LocatorMatcherTaskCreator &creator); - - static QList locatorMatchers(); - static QList classMatchers(); - static QList functionMatchers(); + static void addMatcherCreator(MatcherType type, const LocatorMatcherTaskCreator &creator); + static QList matchers(MatcherType type); signals: void serialOutputDataReady(const LocatorMatcherTask::OutputData &serialOutputData); diff --git a/src/plugins/cppeditor/cpplocatorfilter.cpp b/src/plugins/cppeditor/cpplocatorfilter.cpp index 6a9f50a9c83..9895e23a26d 100644 --- a/src/plugins/cppeditor/cpplocatorfilter.cpp +++ b/src/plugins/cppeditor/cpplocatorfilter.cpp @@ -110,7 +110,7 @@ LocatorMatcherTask locatorMatcher(IndexItem::ItemType type, const EntryFromIndex return {Async(onSetup, onDone, onDone), storage}; } -LocatorMatcherTask cppLocatorMatcher() +LocatorMatcherTask cppAllSymbolsMatcher() { const auto converter = [](const IndexItem::Ptr &info) { // TODO: Passing nullptr for filter -> accept won't work now. Replace with accept function. diff --git a/src/plugins/cppeditor/cpplocatorfilter.h b/src/plugins/cppeditor/cpplocatorfilter.h index b484a9c7687..799bafc553a 100644 --- a/src/plugins/cppeditor/cpplocatorfilter.h +++ b/src/plugins/cppeditor/cpplocatorfilter.h @@ -10,7 +10,7 @@ namespace CppEditor { -Core::LocatorMatcherTask CPPEDITOR_EXPORT cppLocatorMatcher(); +Core::LocatorMatcherTask CPPEDITOR_EXPORT cppAllSymbolsMatcher(); Core::LocatorMatcherTask CPPEDITOR_EXPORT cppClassMatcher(); Core::LocatorMatcherTask CPPEDITOR_EXPORT cppFunctionMatcher(); diff --git a/src/plugins/cppeditor/cpplocatorfilter_test.cpp b/src/plugins/cppeditor/cpplocatorfilter_test.cpp index 7c70ee35bae..fd68b4c1cfd 100644 --- a/src/plugins/cppeditor/cpplocatorfilter_test.cpp +++ b/src/plugins/cppeditor/cpplocatorfilter_test.cpp @@ -127,7 +127,7 @@ void LocatorFilterTest::testLocatorFilter() { QFETCH(QString, testFile); QFETCH(ILocatorFilter *, filter); - QFETCH(MatcherCreator, matcherCreator); + QFETCH(MatcherType, matcherType); QFETCH(QString, searchText); QFETCH(ResultDataList, expectedResults); @@ -138,7 +138,8 @@ void LocatorFilterTest::testLocatorFilter() { Tests::VerifyCleanCppModelManager verify; - CppLocatorFilterTestCase(nullptr, matcherCreator(), testFile, searchText, expectedResults); + CppLocatorFilterTestCase(nullptr, LocatorMatcher::matchers(matcherType), testFile, + searchText, expectedResults); } } @@ -146,7 +147,7 @@ void LocatorFilterTest::testLocatorFilter_data() { QTest::addColumn("testFile"); QTest::addColumn("filter"); - QTest::addColumn("matcherCreator"); + QTest::addColumn("matcherType"); QTest::addColumn("searchText"); QTest::addColumn("expectedResults"); @@ -155,10 +156,6 @@ void LocatorFilterTest::testLocatorFilter_data() ILocatorFilter *cppClassesFilter = cppModelManager->classesFilter(); ILocatorFilter *cppLocatorFilter = cppModelManager->locatorFilter(); - const MatcherCreator functionMatcherCreator = &LocatorMatcher::functionMatchers; - const MatcherCreator classMatcherCreator = &LocatorMatcher::classMatchers; - const MatcherCreator locatorMatcherCreator = &LocatorMatcher::locatorMatchers; - MyTestDataDir testDirectory("testdata_basic"); QString testFile = testDirectory.file("file1.cpp"); testFile[0] = testFile[0].toLower(); // Ensure Windows path sorts after scope names. @@ -169,7 +166,7 @@ void LocatorFilterTest::testLocatorFilter_data() QTest::newRow("CppFunctionsFilter") << testFile << cppFunctionsFilter - << functionMatcherCreator + << MatcherType::Functions << "function" << ResultDataList{ ResultData("functionDefinedInClass(bool, int)", @@ -192,7 +189,7 @@ void LocatorFilterTest::testLocatorFilter_data() QTest::newRow("CppFunctionsFilter-Sorting") << testFile << cppFunctionsFilter - << functionMatcherCreator + << MatcherType::Functions << "pos" << ResultDataList{ ResultData("positiveNumber()", testFileShort), @@ -204,7 +201,7 @@ void LocatorFilterTest::testLocatorFilter_data() QTest::newRow("CppFunctionsFilter-arguments") << testFile << cppFunctionsFilter - << functionMatcherCreator + << MatcherType::Functions << "function*bool" << ResultDataList{ ResultData("functionDefinedInClass(bool, int)", @@ -221,7 +218,7 @@ void LocatorFilterTest::testLocatorFilter_data() QTest::newRow("CppFunctionsFilter-WithNamespacePrefix") << testFile << cppFunctionsFilter - << functionMatcherCreator + << MatcherType::Functions << "mynamespace::" << ResultDataList{ ResultData("MyClass()", "MyNamespace::MyClass (file1.cpp)"), @@ -237,7 +234,7 @@ void LocatorFilterTest::testLocatorFilter_data() QTest::newRow("CppFunctionsFilter-WithClassPrefix") << testFile << cppFunctionsFilter - << functionMatcherCreator + << MatcherType::Functions << "MyClass::func" << ResultDataList{ ResultData("functionDefinedInClass(bool, int)", @@ -259,7 +256,7 @@ void LocatorFilterTest::testLocatorFilter_data() QTest::newRow("CppClassesFilter") << testFile << cppClassesFilter - << classMatcherCreator + << MatcherType::Classes << "myclass" << ResultDataList{ ResultData("MyClass", ""), @@ -270,7 +267,7 @@ void LocatorFilterTest::testLocatorFilter_data() QTest::newRow("CppClassesFilter-WithNamespacePrefix") << testFile << cppClassesFilter - << classMatcherCreator + << MatcherType::Classes << "mynamespace::" << ResultDataList{ ResultData("MyClass", "MyNamespace") @@ -280,7 +277,7 @@ void LocatorFilterTest::testLocatorFilter_data() QTest::newRow("CppLocatorFilter-filtered") << testFile << cppLocatorFilter - << locatorMatcherCreator + << MatcherType::AllSymbols << "my" << ResultDataList{ ResultData("MyClass", testFileShort), @@ -307,7 +304,7 @@ void LocatorFilterTest::testLocatorFilter_data() QTest::newRow("CppClassesFilter-ObjC") << objTestFile << cppClassesFilter - << classMatcherCreator + << MatcherType::Classes << "M" << ResultDataList{ ResultData("MyClass", objTestFileShort), @@ -319,7 +316,7 @@ void LocatorFilterTest::testLocatorFilter_data() QTest::newRow("CppFunctionsFilter-ObjC") << objTestFile << cppFunctionsFilter - << functionMatcherCreator + << MatcherType::Functions << "M" << ResultDataList{ ResultData("anotherMethod", "MyClass (file1.mm)"), @@ -428,8 +425,8 @@ void LocatorFilterTest::testFunctionsFilterHighlighting() { Tests::VerifyCleanCppModelManager verify; - const MatcherCreator matcherCreator = &LocatorMatcher::functionMatchers; - CppLocatorFilterTestCase(nullptr, matcherCreator(), testFile, searchText, expectedResults); + CppLocatorFilterTestCase(nullptr, LocatorMatcher::matchers(MatcherType::Functions), + testFile, searchText, expectedResults); } } diff --git a/src/plugins/cppeditor/cppmodelmanager.cpp b/src/plugins/cppeditor/cppmodelmanager.cpp index 78e3453460c..f4aacf74da1 100644 --- a/src/plugins/cppeditor/cppmodelmanager.cpp +++ b/src/plugins/cppeditor/cppmodelmanager.cpp @@ -535,7 +535,7 @@ void CppModelManager::findUnusedFunctions(const FilePath &folder) // Step 1: Employ locator to find all functions LocatorMatcher *matcher = new LocatorMatcher; - matcher->setTasks(LocatorMatcher::functionMatchers()); + matcher->setTasks(LocatorMatcher::matchers(MatcherType::Functions)); const QPointer search = SearchResultWindow::instance()->startNewSearch(Tr::tr("Find Unused Functions"), {}, @@ -897,9 +897,12 @@ void CppModelManager::initCppTools() setSymbolsFindFilter(std::make_unique(this)); setCurrentDocumentFilter(std::make_unique()); // Setup matchers - LocatorMatcher::addLocatorMatcherCreator([] { return QList{CppEditor::cppLocatorMatcher()}; }); - LocatorMatcher::addClassMatcherCreator([] { return QList{CppEditor::cppClassMatcher()}; }); - LocatorMatcher::addFunctionMatcherCreator([] { return QList{CppEditor::cppFunctionMatcher()}; }); + LocatorMatcher::addMatcherCreator(MatcherType::AllSymbols, + [] { return QList{CppEditor::cppAllSymbolsMatcher()}; }); + LocatorMatcher::addMatcherCreator(MatcherType::Classes, + [] { return QList{CppEditor::cppClassMatcher()}; }); + LocatorMatcher::addMatcherCreator(MatcherType::Functions, + [] { return QList{CppEditor::cppFunctionMatcher()}; }); } CppModelManager::CppModelManager() diff --git a/src/plugins/languageclient/locatorfilter.cpp b/src/plugins/languageclient/locatorfilter.cpp index 563f418e2a7..8acc21feeb1 100644 --- a/src/plugins/languageclient/locatorfilter.cpp +++ b/src/plugins/languageclient/locatorfilter.cpp @@ -94,7 +94,7 @@ LocatorMatcherTask locatorMatcher(Client *client, int maxResultCount, return {root, storage}; } -LocatorMatcherTask workspaceLocatorMatcher(Client *client, int maxResultCount) +LocatorMatcherTask workspaceAllSymbolsMatcher(Client *client, int maxResultCount) { return locatorMatcher(client, maxResultCount, {}); } diff --git a/src/plugins/languageclient/locatorfilter.h b/src/plugins/languageclient/locatorfilter.h index d1c000331a9..4a312599af9 100644 --- a/src/plugins/languageclient/locatorfilter.h +++ b/src/plugins/languageclient/locatorfilter.h @@ -20,8 +20,8 @@ namespace Core { class IEditor; } namespace LanguageClient { // TODO: Could be public methods of Client instead -Core::LocatorMatcherTask LANGUAGECLIENT_EXPORT workspaceLocatorMatcher(Client *client, - int maxResultCount = 0); +Core::LocatorMatcherTask LANGUAGECLIENT_EXPORT workspaceAllSymbolsMatcher(Client *client, + int maxResultCount = 0); Core::LocatorMatcherTask LANGUAGECLIENT_EXPORT workspaceClassMatcher(Client *client, int maxResultCount = 0); Core::LocatorMatcherTask LANGUAGECLIENT_EXPORT workspaceFunctionMatcher(Client *client, diff --git a/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp b/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp index 3fc9d9aea6c..d57c0bacc5f 100644 --- a/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp +++ b/src/plugins/projectexplorer/jsonwizard/jsonfieldpage.cpp @@ -647,7 +647,7 @@ void LineEditField::setupCompletion(FancyLineEdit *lineEdit) lineEdit->setSpecialCompleter(new QCompleter(completionList, lineEdit)); }; LocatorMatcher *matcher = new LocatorMatcher; - matcher->setTasks(LocatorMatcher::classMatchers()); + matcher->setTasks(LocatorMatcher::matchers(MatcherType::Classes)); QObject::connect(matcher, &LocatorMatcher::serialOutputDataReady, lineEdit, handleResults); QObject::connect(matcher, &LocatorMatcher::done, matcher, &QObject::deleteLater); matcher->start();