forked from qt-creator/qt-creator
ProjectExplorer: Use std::unique_ptr in SettingsAccessor
Change-Id: Id5c675c12d5a271efced0f3f52592364bfde34d1 Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
|
@@ -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
|
||||||
|
Reference in New Issue
Block a user