ProjectExplorer: Use std::unique_ptr in SettingsAccessor

Change-Id: Id5c675c12d5a271efced0f3f52592364bfde34d1
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
Tobias Hunger
2017-11-15 15:12:36 +01:00
parent d1c9b33eb7
commit 6cde4a73f8
3 changed files with 35 additions and 46 deletions

View File

@@ -90,12 +90,6 @@ QVariantMap VersionUpgrader::renameKeys(const QList<Change> &changes, QVariantMa
class SettingsAccessorPrivate class SettingsAccessorPrivate
{ {
public: public:
~SettingsAccessorPrivate()
{
qDeleteAll(m_upgraders);
delete m_writer;
}
// The relevant data from the settings currently in use. // The relevant data from the settings currently in use.
class Settings class Settings
{ {
@@ -106,20 +100,21 @@ public:
FileName path; FileName path;
}; };
int firstVersion() const { return m_upgraders.isEmpty() ? -1 : m_upgraders.first()->version(); } int firstVersion() const { return m_upgraders.size() == 0 ? -1 : m_upgraders.front()->version(); }
int lastVersion() const { return m_upgraders.isEmpty() ? -1 : m_upgraders.last()->version(); } int lastVersion() const { return m_upgraders.size() == 0 ? -1 : m_upgraders.back()->version(); }
int currentVersion() const { return lastVersion() + 1; } int currentVersion() const { return lastVersion() + 1; }
VersionUpgrader *upgrader(const int version) const VersionUpgrader *upgrader(const int version) const
{ {
int pos = version - firstVersion(); QTC_ASSERT(version >= 0 && firstVersion() >= 0, return nullptr);
if (pos >= 0 && pos < m_upgraders.count()) const int pos = version - firstVersion();
return m_upgraders.at(pos); if (pos >= 0 && pos < static_cast<int>(m_upgraders.size()))
return 0; return m_upgraders[static_cast<size_t>(pos)].get();
return nullptr;
} }
Settings bestSettings(const SettingsAccessor *accessor, const FileNameList &pathList); Settings bestSettings(const SettingsAccessor *accessor, const FileNameList &pathList);
QList<VersionUpgrader *> m_upgraders; std::vector<std::unique_ptr<VersionUpgrader>> m_upgraders;
PersistentSettingsWriter *m_writer = nullptr; std::unique_ptr<PersistentSettingsWriter> m_writer;
QByteArray m_settingsId; QByteArray m_settingsId;
QString m_displayName; QString m_displayName;
@@ -573,27 +568,21 @@ bool SettingsAccessor::saveSettings(const QVariantMap &map, QWidget *parent) con
QVariantMap data = prepareToSaveSettings(map); QVariantMap data = prepareToSaveSettings(map);
FileName path = FileName::fromString(defaultFileName(d->m_userSuffix)); FileName path = FileName::fromString(defaultFileName(d->m_userSuffix));
if (!d->m_writer || d->m_writer->fileName() != path) { if (!d->m_writer || d->m_writer->fileName() != path)
delete d->m_writer; d->m_writer = std::make_unique<PersistentSettingsWriter>(path, "QtCreatorProject");
d->m_writer = new PersistentSettingsWriter(path, QLatin1String("QtCreatorProject"));
}
return d->m_writer->save(data, parent); return d->m_writer->save(data, parent);
} }
bool SettingsAccessor::addVersionUpgrader(VersionUpgrader *upgrader) bool SettingsAccessor::addVersionUpgrader(std::unique_ptr<VersionUpgrader> upgrader)
{ {
QTC_ASSERT(upgrader, return false); QTC_ASSERT(upgrader.get(), return false);
int version = upgrader->version(); const int version = upgrader->version();
QTC_ASSERT(version >= 0, return false); QTC_ASSERT(version >= 0, return false);
if (d->m_upgraders.isEmpty() || d->currentVersion() == version) const bool haveUpgraders = d->m_upgraders.size() != 0;
d->m_upgraders.append(upgrader); QTC_ASSERT(!haveUpgraders || d->currentVersion() == version, return false);
else if (d->firstVersion() - 1 == version) d->m_upgraders.push_back(std::move(upgrader));
d->m_upgraders.prepend(upgrader);
else
QTC_ASSERT(false, return false); // Upgrader was added out of sequence or twice
return true; return true;
} }

View File

@@ -71,7 +71,7 @@ public:
int currentVersion() const; int currentVersion() const;
int firstSupportedVersion() const; int firstSupportedVersion() const;
bool addVersionUpgrader(VersionUpgrader *upgrader); // takes ownership of upgrader bool addVersionUpgrader(std::unique_ptr<VersionUpgrader> upgrader);
enum ProceedInfo { Continue, DiscardAndContinue }; enum ProceedInfo { Continue, DiscardAndContinue };
typedef QHash<QMessageBox::StandardButton, ProceedInfo> ButtonMap; typedef QHash<QMessageBox::StandardButton, ProceedInfo> ButtonMap;

View File

@@ -366,23 +366,23 @@ UserFileAccessor::UserFileAccessor(Project *project) :
setDisplayName(project->displayName()); setDisplayName(project->displayName());
// Register Upgraders: // Register Upgraders:
addVersionUpgrader(new UserFileVersion1Upgrader(this)); addVersionUpgrader(std::make_unique<UserFileVersion1Upgrader>(this));
addVersionUpgrader(new UserFileVersion2Upgrader); addVersionUpgrader(std::make_unique<UserFileVersion2Upgrader>());
addVersionUpgrader(new UserFileVersion3Upgrader); addVersionUpgrader(std::make_unique<UserFileVersion3Upgrader>());
addVersionUpgrader(new UserFileVersion4Upgrader); addVersionUpgrader(std::make_unique<UserFileVersion4Upgrader>());
addVersionUpgrader(new UserFileVersion5Upgrader); addVersionUpgrader(std::make_unique<UserFileVersion5Upgrader>());
addVersionUpgrader(new UserFileVersion6Upgrader); addVersionUpgrader(std::make_unique<UserFileVersion6Upgrader>());
addVersionUpgrader(new UserFileVersion7Upgrader); addVersionUpgrader(std::make_unique<UserFileVersion7Upgrader>());
addVersionUpgrader(new UserFileVersion8Upgrader); addVersionUpgrader(std::make_unique<UserFileVersion8Upgrader>());
addVersionUpgrader(new UserFileVersion9Upgrader); addVersionUpgrader(std::make_unique<UserFileVersion9Upgrader>());
addVersionUpgrader(new UserFileVersion10Upgrader); addVersionUpgrader(std::make_unique<UserFileVersion10Upgrader>());
addVersionUpgrader(new UserFileVersion11Upgrader(this)); addVersionUpgrader(std::make_unique<UserFileVersion11Upgrader>(this));
addVersionUpgrader(new UserFileVersion12Upgrader); addVersionUpgrader(std::make_unique<UserFileVersion12Upgrader>());
addVersionUpgrader(new UserFileVersion13Upgrader); addVersionUpgrader(std::make_unique<UserFileVersion13Upgrader>());
addVersionUpgrader(new UserFileVersion14Upgrader); addVersionUpgrader(std::make_unique<UserFileVersion14Upgrader>());
addVersionUpgrader(new UserFileVersion15Upgrader); addVersionUpgrader(std::make_unique<UserFileVersion15Upgrader>());
addVersionUpgrader(new UserFileVersion16Upgrader); addVersionUpgrader(std::make_unique<UserFileVersion16Upgrader>());
addVersionUpgrader(new UserFileVersion17Upgrader); addVersionUpgrader(std::make_unique<UserFileVersion17Upgrader>());
} }
Project *UserFileAccessor::project() const Project *UserFileAccessor::project() const