summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDavid Schulz <david.schulz@qt.io>2018-09-17 14:37:34 +0200
committerDavid Schulz <david.schulz@qt.io>2018-09-20 13:08:05 +0000
commitd7b4f3fcf257a727a30de519e12290f050d3e23d (patch)
tree55a932a7765e147e6719c0be8568ae1f397fd24c /src
parent1b2ad0e98927ecfda6a74ecf746b19e01a22bef7 (diff)
downloadqt-creator-d7b4f3fcf257a727a30de519e12290f050d3e23d.tar.gz
LSP: store settings on the heap
In preperation for specialized settings other than the stdio client Change-Id: I20ca33fd1d714e4e0ca527de86261c0a58740d15 Reviewed-by: Eike Ziller <eike.ziller@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/languageclient/baseclient.cpp5
-rw-r--r--src/plugins/languageclient/baseclient.h4
-rw-r--r--src/plugins/languageclient/languageclientsettings.cpp65
-rw-r--r--src/plugins/languageclient/languageclientsettings.h2
4 files changed, 33 insertions, 43 deletions
diff --git a/src/plugins/languageclient/baseclient.cpp b/src/plugins/languageclient/baseclient.cpp
index c437b8f75e..cd9add000e 100644
--- a/src/plugins/languageclient/baseclient.cpp
+++ b/src/plugins/languageclient/baseclient.cpp
@@ -771,10 +771,9 @@ void StdIOClient::setWorkingDirectory(const QString &workingDirectory)
m_process.setWorkingDirectory(workingDirectory);
}
-bool StdIOClient::matches(const LanguageClientSettings &setting)
+bool StdIOClient::matches(const LanguageClientSettings *setting)
{
- return setting.m_executable == m_executable
- && setting.m_arguments == m_executable;
+ return setting->m_executable == m_executable && setting->m_arguments == m_executable;
}
void StdIOClient::sendData(const QByteArray &data)
diff --git a/src/plugins/languageclient/baseclient.h b/src/plugins/languageclient/baseclient.h
index 6c0079f641..d24c0c0db8 100644
--- a/src/plugins/languageclient/baseclient.h
+++ b/src/plugins/languageclient/baseclient.h
@@ -113,7 +113,7 @@ public:
Core::Id id() const { return m_id; }
virtual bool start() { return true; }
- virtual bool matches(const LanguageClientSettings &/*setting*/) { return false; }
+ virtual bool matches(const LanguageClientSettings * /*setting*/) { return false; }
virtual bool reset();
void log(const QString &message,
@@ -179,7 +179,7 @@ public:
void setWorkingDirectory(const QString &workingDirectory);
- bool matches(const LanguageClientSettings &setting) override;
+ bool matches(const LanguageClientSettings *setting) override;
protected:
void sendData(const QByteArray &data) final;
diff --git a/src/plugins/languageclient/languageclientsettings.cpp b/src/plugins/languageclient/languageclientsettings.cpp
index d87875b850..46f45a9020 100644
--- a/src/plugins/languageclient/languageclientsettings.cpp
+++ b/src/plugins/languageclient/languageclientsettings.cpp
@@ -85,7 +85,7 @@ public:
};
private:
- QList<LanguageClientSettings> m_settings;
+ QList<LanguageClientSettings *> m_settings;
};
class LanguageClientSettingsPageWidget : public QWidget
@@ -238,16 +238,17 @@ QVariant LanguageClientSettingsModel::data(const QModelIndex &index, int role) c
{
if (!index.isValid())
return QVariant();
- LanguageClientSettings setting = m_settings[index.row()];
+ LanguageClientSettings *setting = m_settings[index.row()];
+ QTC_ASSERT(setting, return false);
if (role == Qt::DisplayRole || role == Qt::EditRole) {
switch (index.column()) {
- case DisplayNameColumn: return setting.m_name;
- case MimeTypeColumn: return setting.m_mimeType;
- case ExecutableColumn: return setting.m_executable;
- case ArgumentsColumn: return setting.m_arguments;
+ case DisplayNameColumn: return setting->m_name;
+ case MimeTypeColumn: return setting->m_mimeType;
+ case ExecutableColumn: return setting->m_executable;
+ case ArgumentsColumn: return setting->m_arguments;
}
} else if (role == Qt::CheckStateRole && index.column() == EnabledColumn) {
- return setting.m_enabled ? Qt::Checked : Qt::Unchecked;
+ return setting->m_enabled ? Qt::Checked : Qt::Unchecked;
}
return QVariant();
}
@@ -271,10 +272,10 @@ bool LanguageClientSettingsModel::removeRows(int row, int count, const QModelInd
{
if (row >= int(m_settings.size()))
return false;
- const auto first = m_settings.begin() + row;
const int end = qMin(row + count - 1, int(m_settings.size()) - 1);
beginRemoveRows(parent, row, end);
- m_settings.erase(first, first + count);
+ for (auto i = end; i >= row; --i)
+ delete m_settings.takeAt(i);
endRemoveRows();
return true;
}
@@ -285,7 +286,7 @@ bool LanguageClientSettingsModel::insertRows(int row, int count, const QModelInd
return false;
beginInsertRows(parent, row, row + count - 1);
for (int i = 0; i < count; ++i)
- m_settings.insert(row + i, {});
+ m_settings.insert(row + i, new LanguageClientSettings());
endInsertRows();
return true;
}
@@ -294,13 +295,14 @@ bool LanguageClientSettingsModel::setData(const QModelIndex &index, const QVaria
{
if (!index.isValid())
return false;
- LanguageClientSettings &setting = m_settings[index.row()];
+ LanguageClientSettings *setting = m_settings[index.row()];
+ QTC_ASSERT(setting, return false);
if (role == Qt::DisplayRole || role == Qt::EditRole) {
switch (index.column()) {
- case DisplayNameColumn: setting.m_name = value.toString(); break;
- case MimeTypeColumn: setting.m_mimeType = value.toString(); break;
- case ExecutableColumn: setting.m_executable = value.toString(); break;
- case ArgumentsColumn: setting.m_arguments = value.toString(); break;
+ case DisplayNameColumn: setting->m_name = value.toString(); break;
+ case MimeTypeColumn: setting->m_mimeType = value.toString(); break;
+ case ExecutableColumn: setting->m_executable = value.toString(); break;
+ case ArgumentsColumn: setting->m_arguments = value.toString(); break;
default:
return false;
}
@@ -308,7 +310,7 @@ bool LanguageClientSettingsModel::setData(const QModelIndex &index, const QVaria
return true;
}
if (role == Qt::CheckStateRole && index.column() == EnabledColumn) {
- setting.m_enabled = value.toBool();
+ setting->m_enabled = value.toBool();
emit dataChanged(index, index, { Qt::CheckStateRole });
return true;
}
@@ -327,8 +329,8 @@ void LanguageClientSettingsModel::toSettings(QSettings *settings) const
{
settings->beginGroup(settingsGroupKey);
settings->setValue(clientsKey, Utils::transform(m_settings,
- [](const LanguageClientSettings & setting){
- return QVariant(setting.toMap());
+ [](const LanguageClientSettings *setting){
+ return QVariant(setting->toMap());
}));
settings->endGroup();
}
@@ -339,7 +341,7 @@ void LanguageClientSettingsModel::fromSettings(QSettings *settings)
auto variants = settings->value(clientsKey).toList();
m_settings.reserve(variants.size());
m_settings = Utils::transform(variants, [](const QVariant& var){
- return LanguageClientSettings::fromMap(var.toMap());
+ return new LanguageClientSettings(LanguageClientSettings::fromMap(var.toMap()));
});
settings->endGroup();
}
@@ -348,17 +350,17 @@ void LanguageClientSettingsModel::applyChanges()
{
const QVector<BaseClient *> interfaces(LanguageClientManager::clients());
QVector<BaseClient *> toShutdown;
- QList<LanguageClientSettings> toStart = m_settings;
+ QList<LanguageClientSettings *> toStart = m_settings;
// check currently registered interfaces
for (auto interface : interfaces) {
- auto setting = Utils::findOr(m_settings, LanguageClientSettings(),
- [interface](const LanguageClientSettings &setting){
+ auto setting = Utils::findOr(m_settings, nullptr,
+ [interface](const LanguageClientSettings *setting){
return interface->matches(setting);
});
- if (setting.isValid() && setting.m_enabled) {
+ if (setting && setting->isValid() && setting->m_enabled) {
toStart.removeAll(setting);
- if (!interface->isSupportedMimeType(setting.m_mimeType))
- interface->setSupportedMimeType({setting.m_mimeType});
+ if (!interface->isSupportedMimeType(setting->m_mimeType))
+ interface->setSupportedMimeType({setting->m_mimeType});
} else {
toShutdown << interface;
}
@@ -370,8 +372,8 @@ void LanguageClientSettingsModel::applyChanges()
LanguageClientManager::deleteClient(interface);
}
for (auto setting : toStart) {
- if (setting.isValid() && setting.m_enabled)
- LanguageClientManager::startClient(setting.createClient());
+ if (setting && setting->isValid() && setting->m_enabled)
+ LanguageClientManager::startClient(setting->createClient());
}
}
@@ -380,15 +382,6 @@ bool LanguageClientSettings::isValid()
return !m_name.isEmpty() && !m_executable.isEmpty() && QFile::exists(m_executable);
}
-bool LanguageClientSettings::operator==(const LanguageClientSettings &other) const
-{
- return m_name == other.m_name
- && m_enabled == other.m_enabled
- && m_mimeType == other.m_mimeType
- && m_executable == other.m_executable
- && m_arguments == other.m_arguments;
-}
-
BaseClient *LanguageClientSettings::createClient()
{
auto client = new StdIOClient(m_executable, m_arguments);
diff --git a/src/plugins/languageclient/languageclientsettings.h b/src/plugins/languageclient/languageclientsettings.h
index 77fde957db..dd80219a7b 100644
--- a/src/plugins/languageclient/languageclientsettings.h
+++ b/src/plugins/languageclient/languageclientsettings.h
@@ -57,8 +57,6 @@ public:
bool isValid();
- bool operator==(const LanguageClientSettings &other) const;
-
BaseClient *createClient();
QVariantMap toMap() const;