LanguageClient: cleanup languageclientmanager

- sort includes
 - fix clazy and clang-tidy warnings
 - remove unused function
 - adjust naming ('interface' -> 'client')

Change-Id: I12ada223a7a04796f0e6ac992cedf83aefe2ecc0
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
David Schulz
2021-01-25 12:50:27 +01:00
parent ff70b8a9fd
commit fa260e00ed
2 changed files with 33 additions and 39 deletions

View File

@@ -25,20 +25,20 @@
#include "languageclientmanager.h" #include "languageclientmanager.h"
#include "languageclientutils.h"
#include "languageclientplugin.h" #include "languageclientplugin.h"
#include "languageclientutils.h"
#include <coreplugin/editormanager/editormanager.h> #include <coreplugin/editormanager/editormanager.h>
#include <coreplugin/editormanager/ieditor.h> #include <coreplugin/editormanager/ieditor.h>
#include <coreplugin/find/searchresultwindow.h> #include <coreplugin/find/searchresultwindow.h>
#include <coreplugin/icore.h> #include <coreplugin/icore.h>
#include <languageserverprotocol/messages.h> #include <languageserverprotocol/messages.h>
#include <projectexplorer/session.h>
#include <projectexplorer/project.h> #include <projectexplorer/project.h>
#include <projectexplorer/projectexplorer.h> #include <projectexplorer/projectexplorer.h>
#include <projectexplorer/session.h>
#include <texteditor/textdocument.h>
#include <texteditor/texteditor.h> #include <texteditor/texteditor.h>
#include <texteditor/textmark.h> #include <texteditor/textmark.h>
#include <texteditor/textdocument.h>
#include <utils/executeondestruction.h> #include <utils/executeondestruction.h>
#include <utils/mimetypes/mimedatabase.h> #include <utils/mimetypes/mimedatabase.h>
#include <utils/theme/theme.h> #include <utils/theme/theme.h>
@@ -150,7 +150,7 @@ void LanguageClientManager::addExclusiveRequest(const MessageId &id, Client *cli
void LanguageClientManager::reportFinished(const MessageId &id, Client *byClient) void LanguageClientManager::reportFinished(const MessageId &id, Client *byClient)
{ {
QTC_ASSERT(managerInstance, return); QTC_ASSERT(managerInstance, return);
for (Client *client : managerInstance->m_exclusiveRequests[id]) { for (Client *client : qAsConst(managerInstance->m_exclusiveRequests[id])) {
if (client != byClient) if (client != byClient)
client->cancelRequest(id); client->cancelRequest(id);
} }
@@ -187,11 +187,11 @@ void LanguageClientManager::shutdown()
if (managerInstance->m_shuttingDown) if (managerInstance->m_shuttingDown)
return; return;
managerInstance->m_shuttingDown = true; managerInstance->m_shuttingDown = true;
for (Client *client : managerInstance->m_clients) for (Client *client : qAsConst(managerInstance->m_clients))
shutdownClient(client); shutdownClient(client);
QTimer::singleShot(3000, managerInstance, [](){ QTimer::singleShot(3000, managerInstance, [](){
for (auto interface : managerInstance->m_clients) for (Client *client : qAsConst(managerInstance->m_clients))
deleteClient(interface); deleteClient(client);
emit managerInstance->shutdownFinished(); emit managerInstance->shutdownFinished();
}); });
} }
@@ -221,23 +221,25 @@ void LanguageClientManager::applySettings()
for (BaseSettings *setting : restarts) { for (BaseSettings *setting : restarts) {
QList<TextEditor::TextDocument *> documents; QList<TextEditor::TextDocument *> documents;
for (Client *client : clientForSetting(setting)) { const QVector<Client *> currentClients = clientForSetting(setting);
for (Client *client : currentClients) {
documents << managerInstance->m_clientForDocument.keys(client); documents << managerInstance->m_clientForDocument.keys(client);
shutdownClient(client); shutdownClient(client);
} }
for (auto document : documents) for (auto document : qAsConst(documents))
managerInstance->m_clientForDocument.remove(document); managerInstance->m_clientForDocument.remove(document);
if (!setting->isValid() || !setting->m_enabled) if (!setting->isValid() || !setting->m_enabled)
continue; continue;
switch (setting->m_startBehavior) { switch (setting->m_startBehavior) {
case BaseSettings::AlwaysOn: { case BaseSettings::AlwaysOn: {
Client *client = startClient(setting); Client *client = startClient(setting);
for (TextEditor::TextDocument *document : documents) for (TextEditor::TextDocument *document : qAsConst(documents))
managerInstance->m_clientForDocument[document] = client; managerInstance->m_clientForDocument[document] = client;
break; break;
} }
case BaseSettings::RequiresFile: { case BaseSettings::RequiresFile: {
for (Core::IDocument *document : Core::DocumentModel::openedDocuments()) { const QList<Core::IDocument *> &openedDocuments = Core::DocumentModel::openedDocuments();
for (Core::IDocument *document : openedDocuments) {
if (auto textDocument = qobject_cast<TextEditor::TextDocument *>(document)) { if (auto textDocument = qobject_cast<TextEditor::TextDocument *>(document)) {
if (setting->m_languageFilter.isSupported(document)) if (setting->m_languageFilter.isSupported(document))
documents << textDocument; documents << textDocument;
@@ -245,7 +247,7 @@ void LanguageClientManager::applySettings()
} }
if (!documents.isEmpty()) { if (!documents.isEmpty()) {
Client *client = startClient(setting); Client *client = startClient(setting);
for (TextEditor::TextDocument *document : documents) for (TextEditor::TextDocument *document : qAsConst(documents))
client->openDocument(document); client->openDocument(document);
} }
break; break;
@@ -378,17 +380,6 @@ QVector<Client *> LanguageClientManager::reachableClients()
return Utils::filtered(m_clients, &Client::reachable); return Utils::filtered(m_clients, &Client::reachable);
} }
static void sendToInterfaces(const IContent &content, const QVector<Client *> &interfaces)
{
for (Client *interface : interfaces)
interface->sendContent(content);
}
void LanguageClientManager::sendToAllReachableServers(const IContent &content)
{
sendToInterfaces(content, reachableClients());
}
void LanguageClientManager::clientFinished(Client *client) void LanguageClientManager::clientFinished(Client *client)
{ {
constexpr int restartTimeoutS = 5; constexpr int restartTimeoutS = 5;
@@ -464,7 +455,7 @@ void LanguageClientManager::documentOpened(Core::IDocument *document)
if (setting->isValid() && setting->m_enabled if (setting->isValid() && setting->m_enabled
&& setting->m_languageFilter.isSupported(document)) { && setting->m_languageFilter.isSupported(document)) {
if (setting->m_startBehavior == BaseSettings::RequiresProject) { if (setting->m_startBehavior == BaseSettings::RequiresProject) {
const Utils::FilePath filePath = document->filePath(); const Utils::FilePath &filePath = document->filePath();
for (ProjectExplorer::Project *project : for (ProjectExplorer::Project *project :
ProjectExplorer::SessionManager::projects()) { ProjectExplorer::SessionManager::projects()) {
// check whether file is part of this project // check whether file is part of this project
@@ -473,7 +464,7 @@ void LanguageClientManager::documentOpened(Core::IDocument *document)
// check whether we already have a client running for this project // check whether we already have a client running for this project
if (Utils::findOrDefault(clients, if (Utils::findOrDefault(clients,
[project](QPointer<Client> client) { [project](const QPointer<Client> &client) {
return client->project() == project; return client->project() == project;
})) { })) {
continue; continue;
@@ -483,7 +474,7 @@ void LanguageClientManager::documentOpened(Core::IDocument *document)
} else if (setting->m_startBehavior == BaseSettings::RequiresFile && clients.isEmpty()) { } else if (setting->m_startBehavior == BaseSettings::RequiresFile && clients.isEmpty()) {
clients << startClient(setting); clients << startClient(setting);
} }
for (auto client : clients) for (auto client : qAsConst(clients))
client->openDocument(textDocument); client->openDocument(textDocument);
} }
} }
@@ -492,7 +483,7 @@ void LanguageClientManager::documentOpened(Core::IDocument *document)
void LanguageClientManager::documentClosed(Core::IDocument *document) void LanguageClientManager::documentClosed(Core::IDocument *document)
{ {
if (auto textDocument = qobject_cast<TextEditor::TextDocument *>(document)) { if (auto textDocument = qobject_cast<TextEditor::TextDocument *>(document)) {
for (Client *client : m_clients) for (Client *client : qAsConst(m_clients))
client->closeDocument(textDocument); client->closeDocument(textDocument);
m_clientForDocument.remove(textDocument); m_clientForDocument.remove(textDocument);
} }
@@ -501,32 +492,35 @@ void LanguageClientManager::documentClosed(Core::IDocument *document)
void LanguageClientManager::documentContentsSaved(Core::IDocument *document) void LanguageClientManager::documentContentsSaved(Core::IDocument *document)
{ {
if (auto textDocument = qobject_cast<TextEditor::TextDocument *>(document)) { if (auto textDocument = qobject_cast<TextEditor::TextDocument *>(document)) {
for (Client *interface : reachableClients()) const QVector<Client *> &clients = reachableClients();
interface->documentContentsSaved(textDocument); for (Client *client : clients)
client->documentContentsSaved(textDocument);
} }
} }
void LanguageClientManager::documentWillSave(Core::IDocument *document) void LanguageClientManager::documentWillSave(Core::IDocument *document)
{ {
if (auto textDocument = qobject_cast<TextEditor::TextDocument *>(document)) { if (auto textDocument = qobject_cast<TextEditor::TextDocument *>(document)) {
for (Client *interface : reachableClients()) const QVector<Client *> &clients = reachableClients();
interface->documentWillSave(textDocument); for (Client *client : clients)
client->documentWillSave(textDocument);
} }
} }
void LanguageClientManager::updateProject(ProjectExplorer::Project *project) void LanguageClientManager::updateProject(ProjectExplorer::Project *project)
{ {
for (BaseSettings *setting : m_currentSettings) { for (BaseSettings *setting : qAsConst(m_currentSettings)) {
if (setting->isValid() if (setting->isValid()
&& setting->m_enabled && setting->m_enabled
&& setting->m_startBehavior == BaseSettings::RequiresProject) { && setting->m_startBehavior == BaseSettings::RequiresProject) {
if (Utils::findOrDefault(clientForSetting(setting), if (Utils::findOrDefault(clientForSetting(setting),
[project](QPointer<Client> client) { [project](const QPointer<Client> &client) {
return client->project() == project; return client->project() == project;
}) })
== nullptr) { == nullptr) {
Client *newClient = nullptr; Client *newClient = nullptr;
for (Core::IDocument *doc : Core::DocumentModel::openedDocuments()) { const QList<Core::IDocument *> &openedDocuments = Core::DocumentModel::openedDocuments();
for (Core::IDocument *doc : openedDocuments) {
if (setting->m_languageFilter.isSupported(doc) if (setting->m_languageFilter.isSupported(doc)
&& project->isKnownFile(doc->filePath())) { && project->isKnownFile(doc->filePath())) {
if (auto textDoc = qobject_cast<TextEditor::TextDocument *>(doc)) { if (auto textDoc = qobject_cast<TextEditor::TextDocument *>(doc)) {
@@ -541,8 +535,9 @@ void LanguageClientManager::updateProject(ProjectExplorer::Project *project)
} }
} }
} }
for (Client *interface : reachableClients()) const QVector<Client *> &clients = reachableClients();
interface->projectOpened(project); for (Client *client : clients)
client->projectOpened(project);
} }
void LanguageClientManager::projectAdded(ProjectExplorer::Project *project) void LanguageClientManager::projectAdded(ProjectExplorer::Project *project)
@@ -555,8 +550,8 @@ void LanguageClientManager::projectAdded(ProjectExplorer::Project *project)
void LanguageClientManager::projectRemoved(ProjectExplorer::Project *project) void LanguageClientManager::projectRemoved(ProjectExplorer::Project *project)
{ {
project->disconnect(this); project->disconnect(this);
for (Client *interface : m_clients) for (Client *client : qAsConst(m_clients))
interface->projectClosed(project); client->projectClosed(project);
} }
} // namespace LanguageClient } // namespace LanguageClient

View File

@@ -113,7 +113,6 @@ private:
void projectRemoved(ProjectExplorer::Project *project); void projectRemoved(ProjectExplorer::Project *project);
QVector<Client *> reachableClients(); QVector<Client *> reachableClients();
void sendToAllReachableServers(const LanguageServerProtocol::IContent &content);
void clientFinished(Client *client); void clientFinished(Client *client);