diff --git a/src/plugins/clangcodemodel/clangdclient.cpp b/src/plugins/clangcodemodel/clangdclient.cpp index ebacad7b506..b20fd19e42c 100644 --- a/src/plugins/clangcodemodel/clangdclient.cpp +++ b/src/plugins/clangcodemodel/clangdclient.cpp @@ -355,8 +355,8 @@ static void addCompilationDb(QJsonObject &parentObject, const QJsonObject &cdb) parentObject.insert("compilationDatabaseChanges", cdb); } -ClangdClient::ClangdClient(Project *project, const Utils::FilePath &jsonDbDir) - : Client(clientInterface(project, jsonDbDir)), d(new Private(this, project)) +ClangdClient::ClangdClient(Project *project, const Utils::FilePath &jsonDbDir, const Id &id) + : Client(clientInterface(project, jsonDbDir), id), d(new Private(this, project)) { setName(tr("clangd")); LanguageFilter langFilter; diff --git a/src/plugins/clangcodemodel/clangdclient.h b/src/plugins/clangcodemodel/clangdclient.h index dc875f207d6..ff64a9c3f54 100644 --- a/src/plugins/clangcodemodel/clangdclient.h +++ b/src/plugins/clangcodemodel/clangdclient.h @@ -41,7 +41,9 @@ class ClangdClient : public LanguageClient::Client { Q_OBJECT public: - ClangdClient(ProjectExplorer::Project *project, const Utils::FilePath &jsonDbDir); + ClangdClient(ProjectExplorer::Project *project, + const Utils::FilePath &jsonDbDir, + const Utils::Id &id = {}); ~ClangdClient() override; bool isFullyIndexed() const; diff --git a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp index e549f89b02d..d916f7592b1 100644 --- a/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp +++ b/src/plugins/clangcodemodel/clangmodelmanagersupport.cpp @@ -494,9 +494,12 @@ void ClangModelManagerSupport::updateLanguageClient(ProjectExplorer::Project *pr .arg(result.error)); return; } - if (Client * const oldClient = clientForProject(project)) + Utils::Id previousId; + if (Client * const oldClient = clientForProject(project)) { + previousId = oldClient->id(); LanguageClientManager::shutdownClient(oldClient); - ClangdClient * const client = new ClangdClient(project, jsonDbDir); + } + ClangdClient * const client = new ClangdClient(project, jsonDbDir, previousId); connect(client, &Client::shadowDocumentSwitched, this, [](const Utils::FilePath &fp) { ClangdClient::handleUiHeaderChange(fp.fileName()); }); diff --git a/src/plugins/languageclient/client.cpp b/src/plugins/languageclient/client.cpp index dc391575e8a..1866bda8348 100644 --- a/src/plugins/languageclient/client.cpp +++ b/src/plugins/languageclient/client.cpp @@ -130,9 +130,9 @@ class ClientPrivate : public QObject { Q_OBJECT public: - ClientPrivate(Client *client, BaseClientInterface *clientInterface) + ClientPrivate(Client *client, BaseClientInterface *clientInterface, const Utils::Id &id) : q(client) - , m_id(Utils::Id::fromString(QUuid::createUuid().toString())) + , m_id(id.isValid() ? id : Utils::Id::fromString(QUuid::createUuid().toString())) , m_clientCapabilities(q->defaultClientCapabilities()) , m_clientInterface(new InterfaceController(clientInterface)) , m_documentSymbolCache(q) @@ -333,8 +333,8 @@ public: const Utils::FilePath m_serverDeviceTemplate; }; -Client::Client(BaseClientInterface *clientInterface) - : d(new ClientPrivate(this, clientInterface)) +Client::Client(BaseClientInterface *clientInterface, const Utils::Id &id) + : d(new ClientPrivate(this, clientInterface, id)) {} Id Client::id() const diff --git a/src/plugins/languageclient/client.h b/src/plugins/languageclient/client.h index d3126608ff3..3d5017de941 100644 --- a/src/plugins/languageclient/client.h +++ b/src/plugins/languageclient/client.h @@ -49,7 +49,7 @@ class LANGUAGECLIENT_EXPORT Client : public QObject Q_OBJECT public: - explicit Client(BaseClientInterface *clientInterface); // takes ownership + explicit Client(BaseClientInterface *clientInterface, const Utils::Id &id = {}); // takes ownership ~Client() override; Client(const Client &) = delete;