diff --git a/src/plugins/languageclient/client.cpp b/src/plugins/languageclient/client.cpp index 404767b004b..4015e386230 100644 --- a/src/plugins/languageclient/client.cpp +++ b/src/plugins/languageclient/client.cpp @@ -1076,6 +1076,7 @@ void Client::setSnippetsGroup(const QString &group) void Client::start() { + LanguageClientManager::addClient(this); if (m_clientInterface->start()) LanguageClientManager::clientStarted(this); else diff --git a/src/plugins/languageclient/languageclientmanager.cpp b/src/plugins/languageclient/languageclientmanager.cpp index cc7ff0d4f63..c1d4c181b61 100644 --- a/src/plugins/languageclient/languageclientmanager.cpp +++ b/src/plugins/languageclient/languageclientmanager.cpp @@ -102,17 +102,15 @@ void LanguageClientManager::init() managerInstance = new LanguageClientManager(LanguageClientPlugin::instance()); } -void LanguageClientManager::clientStarted(Client *client) +void LanguageClient::LanguageClientManager::addClient(Client *client) { QTC_ASSERT(managerInstance, return); QTC_ASSERT(client, return); - if (managerInstance->m_shuttingDown) { - clientFinished(client); - return; - } - if (!managerInstance->m_clients.contains(client)) - managerInstance->m_clients << client; + if (managerInstance->m_clients.contains(client)) + return; + + managerInstance->m_clients << client; connect(client, &Client::finished, managerInstance, [client]() { clientFinished(client); }); connect(client, &Client::initialized, @@ -127,8 +125,16 @@ void LanguageClientManager::clientStarted(Client *client) [client](const DynamicCapabilities &capabilities) { managerInstance->m_inspector.updateCapabilities(client->name(), capabilities); }); +} - client->initialize(); +void LanguageClientManager::clientStarted(Client *client) +{ + QTC_ASSERT(managerInstance, return); + QTC_ASSERT(client, return); + if (managerInstance->m_shuttingDown) + clientFinished(client); + else + client->initialize(); } void LanguageClientManager::clientFinished(Client *client) diff --git a/src/plugins/languageclient/languageclientmanager.h b/src/plugins/languageclient/languageclientmanager.h index 3b5dd59cbeb..10f42345517 100644 --- a/src/plugins/languageclient/languageclientmanager.h +++ b/src/plugins/languageclient/languageclientmanager.h @@ -62,6 +62,7 @@ public: static void clientFinished(Client *client); static Client *startClient(BaseSettings *setting, ProjectExplorer::Project *project = nullptr); static QVector clients(); + static void addClient(Client *client); static void addExclusiveRequest(const LanguageServerProtocol::MessageId &id, Client *client); static void reportFinished(const LanguageServerProtocol::MessageId &id, Client *byClient);