From 27471f6c550d1274f5a7cf6c7072efc10172171c Mon Sep 17 00:00:00 2001 From: hjk Date: Mon, 15 Jan 2024 11:33:29 +0100 Subject: [PATCH] LanguageClient: Decouple plugin and LanguageClientManager a bit Change-Id: I052156bbc52838e61eb2782af7b48e308eef4a3a Reviewed-by: David Schulz --- .../languageclient/languageclientmanager.cpp | 15 ++++++--------- .../languageclient/languageclientmanager.h | 11 ++++++----- .../languageclient/languageclientplugin.cpp | 7 +------ src/plugins/languageclient/languageclientplugin.h | 2 -- 4 files changed, 13 insertions(+), 22 deletions(-) diff --git a/src/plugins/languageclient/languageclientmanager.cpp b/src/plugins/languageclient/languageclientmanager.cpp index bb90d3e3e1a..b4b23294739 100644 --- a/src/plugins/languageclient/languageclientmanager.cpp +++ b/src/plugins/languageclient/languageclientmanager.cpp @@ -3,7 +3,6 @@ #include "languageclientmanager.h" -#include "languageclientplugin.h" #include "languageclientsymbolsupport.h" #include "languageclienttr.h" #include "locatorfilter.h" @@ -23,6 +22,7 @@ #include #include +#include #include #include #include @@ -76,14 +76,6 @@ LanguageClientManager::~LanguageClientManager() managerInstance = nullptr; } -void LanguageClientManager::init() -{ - if (managerInstance) - return; - QTC_ASSERT(LanguageClientPlugin::instance(), return); - new LanguageClientManager(LanguageClientPlugin::instance()); -} - void LanguageClient::LanguageClientManager::addClient(Client *client) { QTC_ASSERT(managerInstance, return); @@ -681,4 +673,9 @@ bool LanguageClientManager::isShutdownFinished() && managerInstance->m_scheduledForDeletion.isEmpty(); } +void setupLanguageClientManager(QObject *guard) +{ + (void) new LanguageClientManager(guard); +} + } // namespace LanguageClient diff --git a/src/plugins/languageclient/languageclientmanager.h b/src/plugins/languageclient/languageclientmanager.h index e47548b8741..039fb6324e9 100644 --- a/src/plugins/languageclient/languageclientmanager.h +++ b/src/plugins/languageclient/languageclientmanager.h @@ -33,10 +33,6 @@ class LANGUAGECLIENT_EXPORT LanguageClientManager : public QObject Q_DISABLE_COPY_MOVE(LanguageClientManager) public: - ~LanguageClientManager() override; - - static void init(); - static void clientStarted(Client *client); static void clientFinished(Client *client); static Client *startClient(const BaseSettings *setting, ProjectExplorer::Project *project = nullptr); @@ -89,7 +85,10 @@ signals: void openCallHierarchy(); private: - LanguageClientManager(QObject *parent); + explicit LanguageClientManager(QObject *parent); + ~LanguageClientManager() override; + + friend void setupLanguageClientManager(QObject *guard); void editorOpened(Core::IEditor *editor); void documentOpened(Core::IDocument *document); @@ -119,4 +118,6 @@ template bool LanguageClientManager::hasClients() }); } +void setupLanguageClientManager(QObject *guard); + } // namespace LanguageClient diff --git a/src/plugins/languageclient/languageclientplugin.cpp b/src/plugins/languageclient/languageclientplugin.cpp index 6eb4cbb1e1b..3574921d2eb 100644 --- a/src/plugins/languageclient/languageclientplugin.cpp +++ b/src/plugins/languageclient/languageclientplugin.cpp @@ -29,19 +29,14 @@ LanguageClientPlugin::~LanguageClientPlugin() m_instance = nullptr; } -LanguageClientPlugin *LanguageClientPlugin::instance() -{ - return m_instance; -} - void LanguageClientPlugin::initialize() { using namespace Core; setupCallHierarchyFactory(); setupLanguageClientProjectPanel(); + setupLanguageClientManager(this); - LanguageClientManager::init(); LanguageClientSettings::registerClientType({Constants::LANGUAGECLIENT_STDIO_SETTINGS_ID, Tr::tr("Generic StdIO Language Server"), []() { return new StdIOSettings; }}); diff --git a/src/plugins/languageclient/languageclientplugin.h b/src/plugins/languageclient/languageclientplugin.h index fb1f8383b7d..d5c21c4b0ed 100644 --- a/src/plugins/languageclient/languageclientplugin.h +++ b/src/plugins/languageclient/languageclientplugin.h @@ -17,8 +17,6 @@ public: LanguageClientPlugin(); ~LanguageClientPlugin() override; - static LanguageClientPlugin *instance(); - // IPlugin interface private: void initialize() override;