From ed120516f60f9c0570b1150cd9b7ea06d2aeab8b Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Fri, 7 Apr 2023 09:34:00 +0200 Subject: [PATCH] DocumentLocatorFilter: Get rid of the arg from c'tor It's always LanguageClientManager::instance(). Pimpl LanguageClientManager's filters, so that they are constructed after the managerInstance is being assigned. Change-Id: Ib1f6f0c96d57d0e4cb7332ce322f6c4e9ef9fdb1 Reviewed-by: David Schulz Reviewed-by: Qt CI Bot Reviewed-by: --- src/plugins/clangcodemodel/clangdlocatorfilters.cpp | 1 - .../clangcodemodel/clangmodelmanagersupport.cpp | 1 + .../languageclient/languageclientmanager.cpp | 13 ++++++++++++- src/plugins/languageclient/languageclientmanager.h | 7 ++----- src/plugins/languageclient/locatorfilter.cpp | 4 ++-- src/plugins/languageclient/locatorfilter.h | 2 +- 6 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/plugins/clangcodemodel/clangdlocatorfilters.cpp b/src/plugins/clangcodemodel/clangdlocatorfilters.cpp index a7700d942af..0f37e4fb554 100644 --- a/src/plugins/clangcodemodel/clangdlocatorfilters.cpp +++ b/src/plugins/clangcodemodel/clangdlocatorfilters.cpp @@ -192,7 +192,6 @@ class LspCurrentDocumentFilter : public DocumentLocatorFilter { public: LspCurrentDocumentFilter() - : DocumentLocatorFilter(LanguageClientManager::instance()) { setId({}); setDisplayName({}); diff --git a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp index d10c9c6e28f..4d9ee95d860 100644 --- a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp +++ b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp @@ -27,6 +27,7 @@ #include #include +#include #include diff --git a/src/plugins/languageclient/languageclientmanager.cpp b/src/plugins/languageclient/languageclientmanager.cpp index 2d896f1a2d3..275e9ed9e49 100644 --- a/src/plugins/languageclient/languageclientmanager.cpp +++ b/src/plugins/languageclient/languageclientmanager.cpp @@ -6,6 +6,7 @@ #include "languageclientplugin.h" #include "languageclientsymbolsupport.h" #include "languageclienttr.h" +#include "locatorfilter.h" #include #include @@ -41,9 +42,19 @@ static Q_LOGGING_CATEGORY(Log, "qtc.languageclient.manager", QtWarningMsg) static LanguageClientManager *managerInstance = nullptr; static bool g_shuttingDown = false; +class LanguageClientManagerPrivate +{ + DocumentLocatorFilter m_currentDocumentLocatorFilter; + WorkspaceLocatorFilter m_workspaceLocatorFilter; + WorkspaceClassLocatorFilter m_workspaceClassLocatorFilter; + WorkspaceMethodLocatorFilter m_workspaceMethodLocatorFilter; +}; + LanguageClientManager::LanguageClientManager(QObject *parent) : QObject(parent) { + managerInstance = this; + d.reset(new LanguageClientManagerPrivate); using namespace Core; using namespace ProjectExplorer; connect(EditorManager::instance(), &EditorManager::editorOpened, @@ -74,7 +85,7 @@ void LanguageClientManager::init() if (managerInstance) return; QTC_ASSERT(LanguageClientPlugin::instance(), return); - managerInstance = new LanguageClientManager(LanguageClientPlugin::instance()); + new LanguageClientManager(LanguageClientPlugin::instance()); } void LanguageClient::LanguageClientManager::addClient(Client *client) diff --git a/src/plugins/languageclient/languageclientmanager.h b/src/plugins/languageclient/languageclientmanager.h index cf90a2f7468..dd36da935e8 100644 --- a/src/plugins/languageclient/languageclientmanager.h +++ b/src/plugins/languageclient/languageclientmanager.h @@ -6,7 +6,6 @@ #include "client.h" #include "languageclient_global.h" #include "languageclientsettings.h" -#include "locatorfilter.h" #include "lspinspector.h" #include @@ -25,6 +24,7 @@ namespace ProjectExplorer { class Project; } namespace LanguageClient { +class LanguageClientManagerPrivate; class LanguageClientMark; class LANGUAGECLIENT_EXPORT LanguageClientManager : public QObject @@ -104,10 +104,7 @@ private: QList m_currentSettings; // owned QMap> m_clientsForSetting; QHash> m_clientForDocument; - DocumentLocatorFilter m_currentDocumentLocatorFilter{this}; - WorkspaceLocatorFilter m_workspaceLocatorFilter; - WorkspaceClassLocatorFilter m_workspaceClassLocatorFilter; - WorkspaceMethodLocatorFilter m_workspaceMethodLocatorFilter; + std::unique_ptr d; LspInspector m_inspector; }; diff --git a/src/plugins/languageclient/locatorfilter.cpp b/src/plugins/languageclient/locatorfilter.cpp index 19f1698f3ed..fb883c7603d 100644 --- a/src/plugins/languageclient/locatorfilter.cpp +++ b/src/plugins/languageclient/locatorfilter.cpp @@ -110,7 +110,7 @@ LocatorMatcherTask workspaceFunctionMatcher(Client *client, int maxResultCount) {SymbolKind::Method, SymbolKind::Function, SymbolKind::Constructor}); } -DocumentLocatorFilter::DocumentLocatorFilter(LanguageClientManager *languageManager) +DocumentLocatorFilter::DocumentLocatorFilter() { setId(Constants::LANGUAGECLIENT_DOCUMENT_FILTER_ID); setDisplayName(Tr::tr(Constants::LANGUAGECLIENT_DOCUMENT_FILTER_DISPLAY_NAME)); @@ -121,7 +121,7 @@ DocumentLocatorFilter::DocumentLocatorFilter(LanguageClientManager *languageMana setPriority(ILocatorFilter::Low); connect(EditorManager::instance(), &EditorManager::currentEditorChanged, this, &DocumentLocatorFilter::updateCurrentClient); - connect(languageManager, &LanguageClientManager::clientInitialized, + connect(LanguageClientManager::instance(), &LanguageClientManager::clientInitialized, this, &DocumentLocatorFilter::updateCurrentClient); } diff --git a/src/plugins/languageclient/locatorfilter.h b/src/plugins/languageclient/locatorfilter.h index bf6ff30a015..d1c000331a9 100644 --- a/src/plugins/languageclient/locatorfilter.h +++ b/src/plugins/languageclient/locatorfilter.h @@ -33,7 +33,7 @@ class LANGUAGECLIENT_EXPORT DocumentLocatorFilter : public Core::ILocatorFilter { Q_OBJECT public: - DocumentLocatorFilter(LanguageClientManager *languageManager); + DocumentLocatorFilter(); void prepareSearch(const QString &entry) override; QList matchesFor(QFutureInterface &future,