diff --git a/src/libs/utils/persistentsettings.cpp b/src/libs/utils/persistentsettings.cpp index 500204966c5..c193e754085 100644 --- a/src/libs/utils/persistentsettings.cpp +++ b/src/libs/utils/persistentsettings.cpp @@ -360,22 +360,21 @@ FilePath PersistentSettingsReader::filePath() static void writeVariantValue(QXmlStreamWriter &w, const Context &ctx, const QVariant &variant, const Key &key = {}) { - switch (static_cast(variant.type())) { - case static_cast(QVariant::StringList): - case static_cast(QVariant::List): { + static const int storeId = qMetaTypeId(); + + const int variantType = variant.typeId(); + if (variantType == QMetaType::QStringList || variantType == QMetaType::QVariantList) { w.writeStartElement(ctx.valueListElement); - w.writeAttribute(ctx.typeAttribute, QLatin1String(QVariant::typeToName(QVariant::List))); + w.writeAttribute(ctx.typeAttribute, "QVariantList"); if (!key.isEmpty()) w.writeAttribute(ctx.keyAttribute, key); const QList list = variant.toList(); for (const QVariant &var : list) writeVariantValue(w, ctx, var); w.writeEndElement(); - break; - } - case static_cast(QVariant::Map): { + } else if (variantType == storeId || variantType == QMetaType::QVariantMap) { w.writeStartElement(ctx.valueMapElement); - w.writeAttribute(ctx.typeAttribute, QLatin1String(QVariant::typeToName(QVariant::Map))); + w.writeAttribute(ctx.typeAttribute, "QVariantMap"); if (!key.isEmpty()) w.writeAttribute(ctx.keyAttribute, key); const Store varMap = storeFromVariant(variant); @@ -383,12 +382,11 @@ static void writeVariantValue(QXmlStreamWriter &w, const Context &ctx, for (Store::const_iterator i = varMap.constBegin(); i != cend; ++i) writeVariantValue(w, ctx, i.value(), i.key()); w.writeEndElement(); - } - break; - case static_cast(QMetaType::QObjectStar): // ignore QObjects! - case static_cast(QMetaType::VoidStar): // ignore void pointers! - break; - default: + } else if (variantType == QMetaType::QObjectStar) { + // ignore QObjects + } else if (variantType == QMetaType::VoidStar) { + // ignore void pointers + } else { w.writeStartElement(ctx.valueElement); w.writeAttribute(ctx.typeAttribute, QLatin1String(variant.typeName())); if (!key.isEmpty()) @@ -402,7 +400,6 @@ static void writeVariantValue(QXmlStreamWriter &w, const Context &ctx, break; } w.writeEndElement(); - break; } } diff --git a/src/libs/utils/settingsaccessor.cpp b/src/libs/utils/settingsaccessor.cpp index 3bd6f227e37..1c9f30ecba5 100644 --- a/src/libs/utils/settingsaccessor.cpp +++ b/src/libs/utils/settingsaccessor.cpp @@ -387,7 +387,7 @@ Store VersionUpgrader::renameKeys(const QList &changes, Store map) const Store::iterator i = map.begin(); while (i != map.end()) { QVariant v = i.value(); - if (v.type() == QVariant::Map) + if (Utils::isStore(v)) i.value() = variantFromStore(renameKeys(changes, storeFromVariant(v))); ++i; @@ -717,7 +717,7 @@ static QVariant mergeQVariantMapsRecursion(const Store &mainTree, const Store &s QPair kv = mergeResult.value(); - if (kv.second.type() == QVariant::Map) { + if (Utils::isStore(kv.second)) { const Key newKeyPrefix = keyPrefix + kv.first + '/'; kv.second = mergeQVariantMapsRecursion(mainTree, secondaryTree, newKeyPrefix, storeFromVariant(kv.second), diff --git a/src/libs/utils/store.cpp b/src/libs/utils/store.cpp index 1c7cac8c59f..acf77f899db 100644 --- a/src/libs/utils/store.cpp +++ b/src/libs/utils/store.cpp @@ -4,6 +4,7 @@ #include "store.h" #include "algorithm.h" +#include "qtcassert.h" namespace Utils { @@ -24,7 +25,14 @@ QVariant variantFromStore(const Store &store) Store storeFromVariant(const QVariant &value) { - return value.value(); + if (value.typeId() == qMetaTypeId()) + return value.value(); + + if (value.typeId() == QMetaType::QVariantMap) + return storeFromMap(value.toMap()); + + QTC_CHECK(false); + return Store(); } #ifdef QTC_USE_STORE @@ -99,4 +107,10 @@ QVariantMap mapFromStore(const Store &store) #endif } +bool isStore(const QVariant &value) +{ + const int typeId = value.typeId(); + return typeId == QMetaType::QVariantMap || typeId == qMetaTypeId(); +} + } // Utils diff --git a/src/libs/utils/store.h b/src/libs/utils/store.h index ec7eb3bd318..cfebee71cc6 100644 --- a/src/libs/utils/store.h +++ b/src/libs/utils/store.h @@ -27,6 +27,8 @@ QTCREATOR_UTILS_EXPORT Store storeFromVariant(const QVariant &value); QTCREATOR_UTILS_EXPORT Store storeFromMap(const QVariantMap &map); QTCREATOR_UTILS_EXPORT QVariantMap mapFromStore(const Store &store); +QTCREATOR_UTILS_EXPORT bool isStore(const QVariant &value); + } // Utils #ifdef QTC_USE_STORE