aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/languageclient
diff options
context:
space:
mode:
authorDavid Schulz <david.schulz@qt.io>2019-03-27 15:09:08 +0100
committerDavid Schulz <david.schulz@qt.io>2019-04-23 06:44:12 +0000
commitad703e108b0d2aa8aba2a7fb84a41d1ed6618ff1 (patch)
tree765ec1f5ac6d1b3a87dac4b110c20cbfc866a3cc /src/plugins/languageclient
parent7ed924915e89e49d574ef7e63a5aad5d2baf16c6 (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')
-rw-r--r--src/plugins/languageclient/languageclientmanager.cpp43
-rw-r--r--src/plugins/languageclient/languageclientmanager.h4
-rw-r--r--src/plugins/languageclient/languageclientsettings.cpp32
-rw-r--r--src/plugins/languageclient/languageclientsettings.h2
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: