diff --git a/src/plugins/coreplugin/id.cpp b/src/plugins/coreplugin/id.cpp index 275b8d8fb0f..5d0262803da 100644 --- a/src/plugins/coreplugin/id.cpp +++ b/src/plugins/coreplugin/id.cpp @@ -30,6 +30,7 @@ #include "id.h" +#include #include #include @@ -245,6 +246,29 @@ Id Id::fromSetting(const QVariant &variant) return Id(theId(ba)); } +Id Id::versionedId(const QByteArray &prefix, int major, int minor) +{ + if (major < 0) + return fromName(prefix); + + QByteArray result = prefix + '.'; + result += QString::number(major).toLatin1(); + + if (minor < 0) + return fromName(result); + return fromName(result + '.' + QString::number(minor).toLatin1()); +} + +QSet Id::fromStringList(const QStringList &list) +{ + return QSet::fromList(Utils::transform(list, [](const QString &s) { return Id::fromString(s); })); +} + +QStringList Id::toStringList(const QSet &ids) +{ + return Utils::transform(ids.toList(), [](Id i) { return i.toString(); }); +} + /*! Constructs a derived id. diff --git a/src/plugins/coreplugin/id.h b/src/plugins/coreplugin/id.h index f7c95f3ddd8..2a4bdd37821 100644 --- a/src/plugins/coreplugin/id.h +++ b/src/plugins/coreplugin/id.h @@ -74,6 +74,12 @@ public: static Id fromName(const QByteArray &ba); // FIXME: avoid. static Id fromSetting(const QVariant &variant); // Good to use. + static Id versionedId(const QByteArray &prefix, int major, int minor); + static QSet versionedIds(const QByteArray &prefix, int major, int minor); + + static QSet fromStringList(const QStringList &list); + static QStringList toStringList(const QSet &ids); + private: // Intentionally unimplemented Id(const QLatin1String &); diff --git a/src/plugins/qtsupport/baseqtversion.cpp b/src/plugins/qtsupport/baseqtversion.cpp index 6968c30bedb..42e9aa46f3c 100644 --- a/src/plugins/qtsupport/baseqtversion.cpp +++ b/src/plugins/qtsupport/baseqtversion.cpp @@ -76,6 +76,30 @@ static const char QTVERSIONQMAKEPATH[] = "QMakePath"; static const char MKSPEC_VALUE_LIBINFIX[] = "QT_LIBINFIX"; static const char MKSPEC_VALUE_NAMESPACE[] = "QT_NAMESPACE"; +QSet static versionedIds(const QByteArray &prefix, int major, int minor) +{ + QSet result; + result.insert(Id::fromName(prefix)); + + if (major < 0) + return result; + + const QByteArray majorStr = QString::number(major).toLatin1(); + const QByteArray featureMajor = prefix + majorStr; + const QByteArray featureDotMajor = prefix + '.' + majorStr; + + result.insert(Id::fromName(featureMajor)); + result.insert(Id::fromName(featureDotMajor)); + + for (int i = 0; i <= minor; ++i) { + const QByteArray minorStr = QString::number(i).toLatin1(); + result.insert(Id::fromName(featureMajor + '.' + minorStr)); + result.insert(Id::fromName(featureDotMajor + '.' + minorStr)); + } + + return result; +} + /////////////// // QtVersionNumber ///////////////