diff options
author | David Schulz <david.schulz@qt.io> | 2019-03-27 15:09:08 +0100 |
---|---|---|
committer | David Schulz <david.schulz@qt.io> | 2019-04-23 06:44:12 +0000 |
commit | ad703e108b0d2aa8aba2a7fb84a41d1ed6618ff1 (patch) | |
tree | 765ec1f5ac6d1b3a87dac4b110c20cbfc866a3cc /src/plugins/languageclient | |
parent | 7ed924915e89e49d574ef7e63a5aad5d2baf16c6 (diff) |
LanguageClient: move current settings to manager
In preparation to have relationship between clients, settings and
project to one another in the manager.
Change-Id: I00ae15abe03c54b4a58e429d67d6ff939662cce6
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Diffstat (limited to 'src/plugins/languageclient')
4 files changed, 54 insertions, 27 deletions
diff --git a/src/plugins/languageclient/languageclientmanager.cpp b/src/plugins/languageclient/languageclientmanager.cpp index 07d2512e447..26603aa5845 100644 --- a/src/plugins/languageclient/languageclientmanager.cpp +++ b/src/plugins/languageclient/languageclientmanager.cpp @@ -31,6 +31,7 @@ #include <coreplugin/editormanager/editormanager.h> #include <coreplugin/editormanager/ieditor.h> #include <coreplugin/find/searchresultwindow.h> +#include <coreplugin/icore.h> #include <languageserverprotocol/messages.h> #include <projectexplorer/session.h> #include <projectexplorer/project.h> @@ -80,6 +81,7 @@ LanguageClientManager::LanguageClientManager(QObject *parent) LanguageClientManager::~LanguageClientManager() { QTC_ASSERT(m_clients.isEmpty(), qDeleteAll(m_clients)); + qDeleteAll(m_currentSettings); managerInstance = nullptr; } @@ -178,6 +180,45 @@ QList<Client *> LanguageClientManager::clientsSupportingDocument( }).toList(); } +void LanguageClientManager::applySettings() +{ + QTC_ASSERT(instance(), return); + qDeleteAll(instance()->m_currentSettings); + instance()->m_currentSettings = Utils::transform(LanguageClientSettings::currentPageSettings(), + [](BaseSettings *settings) { + return settings->copy(); + }); + LanguageClientSettings::toSettings(Core::ICore::settings(), instance()->m_currentSettings); + + const QList<BaseSettings *> restarts = Utils::filtered(LanguageClientManager::currentSettings(), + &BaseSettings::needsRestart); + + for (BaseSettings *setting : restarts) { + if (auto client = setting->m_client) { + if (client->reachable()) + client->shutdown(); + else + deleteClient(client); + } + if (setting->isValid() && setting->m_enabled) { + const bool start = setting->m_alwaysOn + || Utils::anyOf(Core::DocumentModel::openedDocuments(), + [filter = setting->m_languageFilter]( + Core::IDocument *doc) { + return filter.isSupported(doc); + }); + if (start) + setting->startClient(); + } + } +} + +QList<BaseSettings *> LanguageClientManager::currentSettings() +{ + QTC_ASSERT(instance(), return {}); + return instance()->m_currentSettings; +} + QVector<Client *> LanguageClientManager::reachableClients() { return Utils::filtered(m_clients, &Client::reachable); @@ -247,7 +288,7 @@ void LanguageClientManager::editorOpened(Core::IEditor *editor) void LanguageClientManager::documentOpened(Core::IDocument *document) { - for (BaseSettings *setting : LanguageClientSettings::currentSettings()) { + for (BaseSettings *setting : LanguageClientSettings::currentPageSettings()) { if (setting->m_client.isNull() && setting->m_languageFilter.isSupported(document)) setting->startClient(); } diff --git a/src/plugins/languageclient/languageclientmanager.h b/src/plugins/languageclient/languageclientmanager.h index 7a8e83caa24..7a2fcc175d9 100644 --- a/src/plugins/languageclient/languageclientmanager.h +++ b/src/plugins/languageclient/languageclientmanager.h @@ -69,6 +69,9 @@ public: static QList<Client *> clientsSupportingDocument(const TextEditor::TextDocument *doc); + static void applySettings(); + static QList<BaseSettings *> currentSettings(); + signals: void shutdownFinished(); @@ -94,6 +97,7 @@ private: bool m_shuttingDown = false; QVector<Client *> m_clients; + QList<BaseSettings *> m_currentSettings; // owned QHash<LanguageServerProtocol::MessageId, QList<Client *>> m_exclusiveRequests; }; } // namespace LanguageClient diff --git a/src/plugins/languageclient/languageclientsettings.cpp b/src/plugins/languageclient/languageclientsettings.cpp index 32320f0658d..5f8dfceae3c 100644 --- a/src/plugins/languageclient/languageclientsettings.cpp +++ b/src/plugins/languageclient/languageclientsettings.cpp @@ -134,7 +134,6 @@ public: private: LanguageClientSettingsModel m_model; - QList<BaseSettings *> m_settings; // owned QPointer<LanguageClientSettingsPageWidget> m_widget; }; @@ -238,7 +237,6 @@ LanguageClientSettingsPage::~LanguageClientSettingsPage() { if (m_widget) delete m_widget; - qDeleteAll(m_settings); } void LanguageClientSettingsPage::init() @@ -257,47 +255,31 @@ QWidget *LanguageClientSettingsPage::widget() void LanguageClientSettingsPage::apply() { - qDeleteAll(m_settings); if (m_widget) m_widget->applyCurrentSettings(); - m_settings = Utils::transform(m_model.settings(), - [](const BaseSettings *other) { return other->copy(); }); - LanguageClientSettings::toSettings(Core::ICore::settings(), m_settings); + LanguageClientManager::applySettings(); - QList<BaseSettings *> restarts = Utils::filtered(m_settings, &BaseSettings::needsRestart); - for (auto setting : restarts + m_model.removed()) { - if (auto client = setting->m_client) { + for (BaseSettings *setting : m_model.removed()) { + if (Client *client = setting->m_client) { if (client->reachable()) client->shutdown(); else LanguageClientManager::deleteClient(client); } } - for (BaseSettings *setting : restarts) { - if (setting->isValid() && setting->m_enabled) { - const bool start = setting->m_alwaysOn - || Utils::anyOf(Core::DocumentModel::openedDocuments(), - [filter = setting->m_languageFilter]( - Core::IDocument *doc) { - return filter.isSupported(doc); - }); - if (start) - setting->startClient(); - } - } if (m_widget) { int row = m_widget->currentRow(); - m_model.reset(m_settings); + m_model.reset(LanguageClientManager::currentSettings()); m_widget->resetCurrentSettings(row); } else { - m_model.reset(m_settings); + m_model.reset(LanguageClientManager::currentSettings()); } } void LanguageClientSettingsPage::finish() { - m_model.reset(m_settings); + m_model.reset(LanguageClientManager::currentSettings()); } QList<BaseSettings *> LanguageClientSettingsPage::settings() const @@ -461,7 +443,7 @@ QList<BaseSettings *> LanguageClientSettings::fromSettings(QSettings *settingsIn return settings; } -QList<BaseSettings *> LanguageClientSettings::currentSettings() +QList<BaseSettings *> LanguageClientSettings::currentPageSettings() { return settingsPage().settings(); } diff --git a/src/plugins/languageclient/languageclientsettings.h b/src/plugins/languageclient/languageclientsettings.h index a2f4a107221..59f797e5945 100644 --- a/src/plugins/languageclient/languageclientsettings.h +++ b/src/plugins/languageclient/languageclientsettings.h @@ -124,7 +124,7 @@ class LanguageClientSettings public: static void init(); static QList<BaseSettings *> fromSettings(QSettings *settings); - static QList<BaseSettings *> currentSettings(); + static QList<BaseSettings *> currentPageSettings(); static void toSettings(QSettings *settings, const QList<BaseSettings *> &languageClientSettings); private: |