Kit: Add constructor to restore Kit from QVariantMap

Do not trust kits with an invalid id, as there is no way those
could have ended up being saved out by creator. Safe all other kits
that were constructed using Kit(const QVariantMap &).

This new constructor uses the code that used to be in fromMap(...),
with some simplifications.

Remove fromMap(...) method from kit as it is no longer used.

Change-Id: Iac28ea9b85670e03088a4b7c5283af6b4b70c0fc
Reviewed-by: Daniel Teske <daniel.teske@digia.com>
This commit is contained in:
Tobias Hunger
2013-10-16 16:45:23 +02:00
parent b63f3f808c
commit 0224ec0a64
3 changed files with 40 additions and 38 deletions

View File

@@ -80,6 +80,9 @@ public:
{
if (!id.isValid())
m_id = Id::fromString(QUuid::createUuid().toString());
m_displayName = QCoreApplication::translate("ProjectExplorer::Kit", "Unnamed");
m_iconPath = Utils::FileName::fromString(QLatin1String(":///DESKTOP///"));
}
QString m_displayName;
@@ -112,11 +115,40 @@ Kit::Kit(Core::Id id) :
foreach (KitInformation *sti, KitManager::kitInformation())
d->m_data.insert(sti->id(), sti->defaultValue(this));
d->m_displayName = QCoreApplication::translate("ProjectExplorer::Kit", "Unnamed");
d->m_iconPath = Utils::FileName::fromString(QLatin1String(":///DESKTOP///"));
d->m_icon = icon(d->m_iconPath);
}
Kit::Kit(const QVariantMap &data) :
d(new Internal::KitPrivate(Core::Id()))
{
d->m_id = Id::fromSetting(data.value(QLatin1String(ID_KEY)));
d->m_autodetected = data.value(QLatin1String(AUTODETECTED_KEY)).toBool();
// if we don't have that setting assume that autodetected implies sdk
QVariant value = data.value(QLatin1String(SDK_PROVIDED_KEY));
if (value.isValid())
d->m_sdkProvided = value.toBool();
else
d->m_sdkProvided = d->m_autodetected;
d->m_displayName = data.value(QLatin1String(DISPLAYNAME_KEY),
d->m_displayName).toString();
d->m_iconPath = Utils::FileName::fromString(data.value(QLatin1String(ICON_KEY),
d->m_iconPath.toString()).toString());
d->m_icon = icon(d->m_iconPath);
QVariantMap extra = data.value(QLatin1String(DATA_KEY)).toMap();
d->m_data.clear(); // remove default values
const QVariantMap::ConstIterator cend = extra.constEnd();
for (QVariantMap::ConstIterator it = extra.constBegin(); it != cend; ++it)
d->m_data.insert(Id::fromString(it.key()), it.value());
QStringList mutableInfoList = data.value(QLatin1String(MUTABLE_INFO_KEY)).toStringList();
foreach (const QString &mutableInfo, mutableInfoList)
d->m_mutable.insert(Core::Id::fromString(mutableInfo));
}
Kit::~Kit()
{
delete d;
@@ -459,39 +491,6 @@ QString Kit::toHtml() const
return rc;
}
bool Kit::fromMap(const QVariantMap &data)
{
KitGuard g(this);
Id id = Id::fromSetting(data.value(QLatin1String(ID_KEY)));
if (!id.isValid())
return false;
d->m_id = id;
d->m_autodetected = data.value(QLatin1String(AUTODETECTED_KEY)).toBool();
// if we don't have that setting assume that autodetected implies sdk
QVariant value = data.value(QLatin1String(SDK_PROVIDED_KEY));
if (value.isValid())
d->m_sdkProvided = value.toBool();
else
d->m_sdkProvided = d->m_autodetected;
d->m_displayName = data.value(QLatin1String(DISPLAYNAME_KEY)).toString();
d->m_iconPath = Utils::FileName::fromString(data.value(QLatin1String(ICON_KEY)).toString());
d->m_icon = icon(d->m_iconPath);
QVariantMap extra = data.value(QLatin1String(DATA_KEY)).toMap();
d->m_data.clear(); // remove default values
const QVariantMap::ConstIterator cend = extra.constEnd();
for (QVariantMap::ConstIterator it = extra.constBegin(); it != cend; ++it)
d->m_data.insert(Id::fromString(it.key()), it.value());
QStringList mutableInfoList = data.value(QLatin1String(MUTABLE_INFO_KEY)).toStringList();
foreach (const QString &mutableInfo, mutableInfoList) {
d->m_mutable.insert(Core::Id::fromString(mutableInfo));
}
return true;
}
void Kit::setAutoDetected(bool detected)
{
d->m_autodetected = detected;