diff options
author | David Schulz <david.schulz@qt.io> | 2019-09-11 11:15:39 +0200 |
---|---|---|
committer | David Schulz <david.schulz@qt.io> | 2019-09-12 10:53:57 +0000 |
commit | d3c94edd934334391e33cd17b259d3a2eac02038 (patch) | |
tree | df13df05999d2bf139a417bffa8c8d0a490c2662 /src/plugins/languageclient/languageclientmanager.cpp | |
parent | 74688679b29412512e2dc0c1f3b5c3c15a678b29 (diff) |
LanguageClient: only send contents of TextDocuments to the server
Change-Id: Ifdcd6ba161336814744c51f15e35a756960cb199
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src/plugins/languageclient/languageclientmanager.cpp')
-rw-r--r-- | src/plugins/languageclient/languageclientmanager.cpp | 45 |
1 files changed, 28 insertions, 17 deletions
diff --git a/src/plugins/languageclient/languageclientmanager.cpp b/src/plugins/languageclient/languageclientmanager.cpp index 9f902bcae4b..d393fe799a5 100644 --- a/src/plugins/languageclient/languageclientmanager.cpp +++ b/src/plugins/languageclient/languageclientmanager.cpp @@ -201,7 +201,7 @@ LanguageClientManager *LanguageClientManager::instance() return managerInstance; } -QList<Client *> LanguageClientManager::clientsSupportingDocument(const Core::IDocument *doc) +QList<Client *> LanguageClientManager::clientsSupportingDocument(const TextEditor::TextDocument *doc) { QTC_ASSERT(managerInstance, return {}); QTC_ASSERT(doc, return {};); @@ -222,7 +222,7 @@ void LanguageClientManager::applySettings() &BaseSettings::needsRestart); for (BaseSettings *setting : restarts) { - QList<Core::IDocument *> documents; + QList<TextEditor::TextDocument *> documents; for (Client *client : clientForSetting(setting)) { documents << managerInstance->m_clientForDocument.keys(client); shutdownClient(client); @@ -232,7 +232,7 @@ void LanguageClientManager::applySettings() switch (setting->m_startBehavior) { case BaseSettings::AlwaysOn: { Client *client = startClient(setting); - for (Core::IDocument *document : documents) + for (TextEditor::TextDocument *document : documents) managerInstance->m_clientForDocument[document] = client; break; } @@ -242,7 +242,7 @@ void LanguageClientManager::applySettings() return filter.isSupported(doc); })) { Client *client = startClient(setting); - for (Core::IDocument *document : documents) + for (TextEditor::TextDocument *document : documents) managerInstance->m_clientForDocument[document] = client; } break; @@ -295,13 +295,13 @@ const BaseSettings *LanguageClientManager::settingForClient(Client *client) return nullptr; } -Client *LanguageClientManager::clientForDocument(Core::IDocument *document) +Client *LanguageClientManager::clientForDocument(TextEditor::TextDocument *document) { QTC_ASSERT(managerInstance, return nullptr); return document == nullptr ? nullptr : managerInstance->m_clientForDocument[document].data(); } -bool LanguageClientManager::reOpenDocumentWithClient(Core::IDocument *document, Client *client) +bool LanguageClientManager::reOpenDocumentWithClient(TextEditor::TextDocument *document, Client *client) { Utils::ExecuteOnDestruction outlineUpdater(&TextEditor::IOutlineWidgetFactory::updateOutline); if (Client *currentClient = clientForDocument(document)) { @@ -358,7 +358,7 @@ void LanguageClientManager::clientFinished(Client *client) } else { if (unexpectedFinish && !m_shuttingDown) client->log(tr("Unexpectedly finished."), Core::MessageManager::Flash); - for (Core::IDocument *document : m_clientForDocument.keys(client)) + for (TextEditor::TextDocument *document : m_clientForDocument.keys(client)) m_clientForDocument.remove(document); deleteClient(client); if (m_shuttingDown && m_clients.isEmpty()) @@ -394,7 +394,7 @@ void LanguageClientManager::editorOpened(Core::IEditor *editor) }); }); updateEditorToolBar(editor); - if (Core::IDocument *document = editor->document()) { + if (TextEditor::TextDocument *document = textEditor->textDocument()) { if (Client *client = m_clientForDocument[document]) widget->addHoverHandler(client->hoverHandler()); } @@ -404,6 +404,10 @@ void LanguageClientManager::editorOpened(Core::IEditor *editor) void LanguageClientManager::documentOpened(Core::IDocument *document) { + auto textDocument = qobject_cast<TextEditor::TextDocument *>(document); + if (!textDocument) + return; + // check whether we have to start servers for this document bool opened = false; for (BaseSettings *setting : LanguageClientSettings::currentPageSettings()) { @@ -434,7 +438,7 @@ void LanguageClientManager::documentOpened(Core::IDocument *document) continue; for (auto client : clients) { - if (openDocumentWithClient(document, client)) { + if (openDocumentWithClient(textDocument, client)) { opened = true; continue; } @@ -443,7 +447,8 @@ void LanguageClientManager::documentOpened(Core::IDocument *document) } } -bool LanguageClientManager::openDocumentWithClient(Core::IDocument *document, Client *client) +bool LanguageClientManager::openDocumentWithClient(TextEditor::TextDocument *document, + Client *client) { if (!client || client->state() == Client::Error) return false; @@ -455,21 +460,27 @@ bool LanguageClientManager::openDocumentWithClient(Core::IDocument *document, Cl void LanguageClientManager::documentClosed(Core::IDocument *document) { - for (Client *client : reachableClients()) - client->closeDocument(document); - m_clientForDocument.remove(document); + if (auto textDocument = qobject_cast<TextEditor::TextDocument *>(document)) { + for (Client *client : reachableClients()) + client->closeDocument(textDocument); + m_clientForDocument.remove(textDocument); + } } void LanguageClientManager::documentContentsSaved(Core::IDocument *document) { - for (Client *interface : reachableClients()) - interface->documentContentsSaved(document); + if (auto textDocument = qobject_cast<TextEditor::TextDocument *>(document)) { + for (Client *interface : reachableClients()) + interface->documentContentsSaved(textDocument); + } } void LanguageClientManager::documentWillSave(Core::IDocument *document) { - for (Client *interface : reachableClients()) - interface->documentWillSave(document); + if (auto textDocument = qobject_cast<TextEditor::TextDocument *>(document)) { + for (Client *interface : reachableClients()) + interface->documentWillSave(textDocument); + } } void LanguageClientManager::findLinkAt(const Utils::FilePath &filePath, |