From a8b5b1d60683c5bffeb59759702b3899bbe968ce Mon Sep 17 00:00:00 2001 From: David Schulz Date: Thu, 18 Jan 2024 13:17:29 +0100 Subject: [PATCH] LanguageClient: fix reassigning documents to restarted server Make sure a client is still responsible for all assigned documents after it gets restarted because of setting changes. Change-Id: I3c7d8635e6699c137427864c1bf4eb183bfcf2f8 Reviewed-by: Reviewed-by: Artem Sokolovskii Reviewed-by: Christian Stenger --- .../languageclient/languageclientmanager.cpp | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/plugins/languageclient/languageclientmanager.cpp b/src/plugins/languageclient/languageclientmanager.cpp index b4b23294739..7ad251da46d 100644 --- a/src/plugins/languageclient/languageclientmanager.cpp +++ b/src/plugins/languageclient/languageclientmanager.cpp @@ -306,17 +306,25 @@ void LanguageClientManager::applySettings() break; } case BaseSettings::RequiresFile: { - const QList &openedDocuments = Core::DocumentModel::openedDocuments(); - for (Core::IDocument *document : openedDocuments) { - if (auto textDocument = qobject_cast(document)) { - if (setting->m_languageFilter.isSupported(document)) - documents << textDocument; + Client *client = nullptr; + for (TextEditor::TextDocument *previousDocument : std::as_const(documents)) { + if (setting->m_languageFilter.isSupported(previousDocument)) { + if (!client) + client = startClient(setting); + openDocumentWithClient(previousDocument, client); } } - if (!documents.isEmpty()) { - Client *client = startClient(setting); - for (TextEditor::TextDocument *document : std::as_const(documents)) - client->openDocument(document); + const QList &openedDocuments = Core::DocumentModel::openedDocuments(); + for (Core::IDocument *document : openedDocuments) { + if (documents.contains(document)) + continue; // already handled above + if (auto textDocument = qobject_cast(document)) { + if (setting->m_languageFilter.isSupported(document)) { + if (!client) + client = startClient(setting); + client->openDocument(textDocument); + } + } } break; }