summaryrefslogtreecommitdiff
path: root/src/plugins/languageclient/languageclientmanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/languageclient/languageclientmanager.cpp')
-rw-r--r--src/plugins/languageclient/languageclientmanager.cpp25
1 files changed, 17 insertions, 8 deletions
diff --git a/src/plugins/languageclient/languageclientmanager.cpp b/src/plugins/languageclient/languageclientmanager.cpp
index 923b521bfd..959f3150b9 100644
--- a/src/plugins/languageclient/languageclientmanager.cpp
+++ b/src/plugins/languageclient/languageclientmanager.cpp
@@ -224,6 +224,8 @@ void LanguageClientManager::applySettings()
documents << managerInstance->m_clientForDocument.keys(client);
shutdownClient(client);
}
+ for (auto document : documents)
+ managerInstance->m_clientForDocument.remove(document);
if (!setting->isValid() || !setting->m_enabled)
continue;
switch (setting->m_startBehavior) {
@@ -234,13 +236,19 @@ void LanguageClientManager::applySettings()
break;
}
case BaseSettings::RequiresFile: {
- if (Utils::anyOf(Core::DocumentModel::openedDocuments(),
- [filter = setting->m_languageFilter](Core::IDocument *doc) {
- return filter.isSupported(doc);
- })) {
+ for (Core::IDocument *document : Core::DocumentModel::openedDocuments()) {
+ if (auto textDocument = qobject_cast<TextEditor::TextDocument *>(document)) {
+ if (setting->m_languageFilter.isSupported(document))
+ documents << textDocument;
+ }
+ }
+ if (!documents.isEmpty()) {
Client *client = startClient(setting);
- for (TextEditor::TextDocument *document : documents)
- managerInstance->m_clientForDocument[document] = client;
+ for (TextEditor::TextDocument *document : documents) {
+ if (managerInstance->m_clientForDocument.value(document).isNull())
+ managerInstance->m_clientForDocument[document] = client;
+ client->openDocument(document);
+ }
}
break;
}
@@ -295,7 +303,8 @@ const BaseSettings *LanguageClientManager::settingForClient(Client *client)
Client *LanguageClientManager::clientForDocument(TextEditor::TextDocument *document)
{
QTC_ASSERT(managerInstance, return nullptr);
- return document == nullptr ? nullptr : managerInstance->m_clientForDocument[document].data();
+ return document == nullptr ? nullptr
+ : managerInstance->m_clientForDocument.value(document).data();
}
Client *LanguageClientManager::clientForFilePath(const Utils::FilePath &filePath)
@@ -419,7 +428,7 @@ void LanguageClientManager::documentOpened(Core::IDocument *document)
}
for (auto client : clients) {
openDocumentWithClient(textDocument, client);
- if (m_clientForDocument.value(textDocument).isNull())
+ if (!m_clientForDocument.contains(textDocument))
m_clientForDocument[textDocument] = client;
}
}