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; break;
} }
case BaseSettings::RequiresFile: { case BaseSettings::RequiresFile: {
const QList<Core::IDocument *> &openedDocuments = Core::DocumentModel::openedDocuments(); Client *client = nullptr;
for (Core::IDocument *document : openedDocuments) { for (TextEditor::TextDocument *previousDocument : std::as_const(documents)) {
if (auto textDocument = qobject_cast<TextEditor::TextDocument *>(document)) { if (setting->m_languageFilter.isSupported(previousDocument)) {
if (setting->m_languageFilter.isSupported(document)) if (!client)
documents << textDocument; client = startClient(setting);
openDocumentWithClient(previousDocument, client);
} }
} }
if (!documents.isEmpty()) { const QList<Core::IDocument *> &openedDocuments = Core::DocumentModel::openedDocuments();
Client *client = startClient(setting); for (Core::IDocument *document : openedDocuments) {
for (TextEditor::TextDocument *document : std::as_const(documents)) if (documents.contains(document))
client->openDocument(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; break;
} }