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: <github-actions-qt-creator@cristianadam.eu>
Reviewed-by: Artem Sokolovskii <artem.sokolovskii@qt.io>
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
David Schulz
2024-01-18 13:17:29 +01:00
parent 6515f935d6
commit a8b5b1d606

View File

@@ -306,17 +306,25 @@ void LanguageClientManager::applySettings()
break;
}
case BaseSettings::RequiresFile: {
const QList<Core::IDocument *> &openedDocuments = Core::DocumentModel::openedDocuments();
for (Core::IDocument *document : openedDocuments) {
if (auto textDocument = qobject_cast<TextEditor::TextDocument *>(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<Core::IDocument *> &openedDocuments = Core::DocumentModel::openedDocuments();
for (Core::IDocument *document : openedDocuments) {
if (documents.contains(document))
continue; // already handled above
if (auto textDocument = qobject_cast<TextEditor::TextDocument *>(document)) {
if (setting->m_languageFilter.isSupported(document)) {
if (!client)
client = startClient(setting);
client->openDocument(textDocument);
}
}
}
break;
}