diff options
author | David Schulz <david.schulz@qt.io> | 2018-09-17 14:37:34 +0200 |
---|---|---|
committer | David Schulz <david.schulz@qt.io> | 2018-09-20 13:08:05 +0000 |
commit | d7b4f3fcf257a727a30de519e12290f050d3e23d (patch) | |
tree | 55a932a7765e147e6719c0be8568ae1f397fd24c /src | |
parent | 1b2ad0e98927ecfda6a74ecf746b19e01a22bef7 (diff) | |
download | qt-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.cpp | 5 | ||||
-rw-r--r-- | src/plugins/languageclient/baseclient.h | 4 | ||||
-rw-r--r-- | src/plugins/languageclient/languageclientsettings.cpp | 65 | ||||
-rw-r--r-- | src/plugins/languageclient/languageclientsettings.h | 2 |
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; |