From 6d817307647fe1c3ab0b1d511b44479f8cde7fb7 Mon Sep 17 00:00:00 2001 From: Tobias Hunger Date: Tue, 7 Jul 2015 14:20:12 +0200 Subject: [PATCH] ToolChainFactory: Add typeIdFromMap and use it in factories Change-Id: Id3254bcb3a5c426540bbab49dc61545031af6826 Reviewed-by: Daniel Teske --- src/plugins/android/androidtoolchain.cpp | 2 +- src/plugins/projectexplorer/customtoolchain.cpp | 3 +-- src/plugins/projectexplorer/gcctoolchain.cpp | 9 ++++----- src/plugins/projectexplorer/msvctoolchain.cpp | 2 +- src/plugins/projectexplorer/toolchain.cpp | 15 ++++++++++++++- src/plugins/projectexplorer/toolchain.h | 1 + src/plugins/projectexplorer/toolchainmanager.cpp | 7 ++++--- src/plugins/projectexplorer/wincetoolchain.cpp | 2 +- src/plugins/qnx/qnxtoolchain.cpp | 3 +-- 9 files changed, 28 insertions(+), 16 deletions(-) diff --git a/src/plugins/android/androidtoolchain.cpp b/src/plugins/android/androidtoolchain.cpp index adf1a7e85a0..20e8554f8f5 100644 --- a/src/plugins/android/androidtoolchain.cpp +++ b/src/plugins/android/androidtoolchain.cpp @@ -271,7 +271,7 @@ QList AndroidToolChainFactory::autoDetect() bool AndroidToolChainFactory::canRestore(const QVariantMap &data) { - return idFromMap(data).startsWith(QByteArray(Constants::ANDROID_TOOLCHAIN_ID) + ':'); + return typeIdFromMap(data) == Constants::ANDROID_TOOLCHAIN_ID; } ToolChain *AndroidToolChainFactory::restore(const QVariantMap &data) diff --git a/src/plugins/projectexplorer/customtoolchain.cpp b/src/plugins/projectexplorer/customtoolchain.cpp index dd445dbdd91..142d47dcd58 100644 --- a/src/plugins/projectexplorer/customtoolchain.cpp +++ b/src/plugins/projectexplorer/customtoolchain.cpp @@ -394,8 +394,7 @@ ToolChain *CustomToolChainFactory::create() // Used by the ToolChainManager to restore user-generated tool chains bool CustomToolChainFactory::canRestore(const QVariantMap &data) { - const QByteArray id = idFromMap(data); - return id.startsWith(QByteArray(Constants::CUSTOM_TOOLCHAIN_ID) + ':'); + return typeIdFromMap(data) == Constants::CUSTOM_TOOLCHAIN_ID; } ToolChain *CustomToolChainFactory::restore(const QVariantMap &data) diff --git a/src/plugins/projectexplorer/gcctoolchain.cpp b/src/plugins/projectexplorer/gcctoolchain.cpp index 80b3bde2f3c..49c77720df6 100644 --- a/src/plugins/projectexplorer/gcctoolchain.cpp +++ b/src/plugins/projectexplorer/gcctoolchain.cpp @@ -795,8 +795,7 @@ QList GccToolChainFactory::autoDetect() // Used by the ToolChainManager to restore user-generated tool chains bool GccToolChainFactory::canRestore(const QVariantMap &data) { - const QByteArray id = idFromMap(data); - return id.startsWith(QByteArray(Constants::GCC_TOOLCHAIN_ID) + ':'); + return typeIdFromMap(data) == Constants::GCC_TOOLCHAIN_ID; } ToolChain *GccToolChainFactory::restore(const QVariantMap &data) @@ -1139,7 +1138,7 @@ ToolChain *ClangToolChainFactory::create() bool ClangToolChainFactory::canRestore(const QVariantMap &data) { - return idFromMap(data).startsWith(QByteArray(Constants::CLANG_TOOLCHAIN_ID) + ':'); + return typeIdFromMap(data) == Constants::CLANG_TOOLCHAIN_ID; } ToolChain *ClangToolChainFactory::restore(const QVariantMap &data) @@ -1245,7 +1244,7 @@ ToolChain *MingwToolChainFactory::create() bool MingwToolChainFactory::canRestore(const QVariantMap &data) { - return idFromMap(data).startsWith(QByteArray(Constants::MINGW_TOOLCHAIN_ID) + ':'); + return typeIdFromMap(data) == Constants::MINGW_TOOLCHAIN_ID; } ToolChain *MingwToolChainFactory::restore(const QVariantMap &data) @@ -1341,7 +1340,7 @@ ToolChain *LinuxIccToolChainFactory::create() bool LinuxIccToolChainFactory::canRestore(const QVariantMap &data) { - return idFromMap(data).startsWith(QByteArray(Constants::LINUXICC_TOOLCHAIN_ID) + ':'); + return typeIdFromMap(data) == Constants::LINUXICC_TOOLCHAIN_ID; } ToolChain *LinuxIccToolChainFactory::restore(const QVariantMap &data) diff --git a/src/plugins/projectexplorer/msvctoolchain.cpp b/src/plugins/projectexplorer/msvctoolchain.cpp index 8984635fcef..2958d21a137 100644 --- a/src/plugins/projectexplorer/msvctoolchain.cpp +++ b/src/plugins/projectexplorer/msvctoolchain.cpp @@ -632,7 +632,7 @@ bool MsvcToolChain::operator ==(const ToolChain &other) const bool MsvcToolChainFactory::canRestore(const QVariantMap &data) { - return idFromMap(data).startsWith(QByteArray(Constants::MSVC_TOOLCHAIN_ID) + ':'); + return typeIdFromMap(data) == Constants::MSVC_TOOLCHAIN_ID; } } // namespace Internal diff --git a/src/plugins/projectexplorer/toolchain.cpp b/src/plugins/projectexplorer/toolchain.cpp index 6953996a731..846a7ac865c 100644 --- a/src/plugins/projectexplorer/toolchain.cpp +++ b/src/plugins/projectexplorer/toolchain.cpp @@ -261,9 +261,22 @@ ToolChain *ToolChainFactory::restore(const QVariantMap &) return 0; } +static QPair rawIdData(const QVariantMap &data) +{ + const QString raw = data.value(QLatin1String(ID_KEY)).toString(); + const int pos = raw.indexOf(QLatin1Char(':')); + QTC_ASSERT(pos > 0, return qMakePair(QString::fromLatin1("unknown"), QString::fromLatin1("unknown"))); + return qMakePair(raw.mid(0, pos), raw.mid(pos + 1)); +} + QByteArray ToolChainFactory::idFromMap(const QVariantMap &data) { - return data.value(QLatin1String(ID_KEY)).toByteArray(); + return rawIdData(data).second.toUtf8(); +} + +Core::Id ToolChainFactory::typeIdFromMap(const QVariantMap &data) +{ + return Core::Id::fromString(rawIdData(data).first); } void ToolChainFactory::autoDetectionToMap(QVariantMap &data, bool detected) diff --git a/src/plugins/projectexplorer/toolchain.h b/src/plugins/projectexplorer/toolchain.h index 8d6f23dc45d..547854edf15 100644 --- a/src/plugins/projectexplorer/toolchain.h +++ b/src/plugins/projectexplorer/toolchain.h @@ -192,6 +192,7 @@ public: virtual ToolChain *restore(const QVariantMap &data); static QByteArray idFromMap(const QVariantMap &data); + static Core::Id typeIdFromMap(const QVariantMap &data); static void autoDetectionToMap(QVariantMap &data, bool detected); protected: diff --git a/src/plugins/projectexplorer/toolchainmanager.cpp b/src/plugins/projectexplorer/toolchainmanager.cpp index 22615ae7e27..780c532f016 100644 --- a/src/plugins/projectexplorer/toolchainmanager.cpp +++ b/src/plugins/projectexplorer/toolchainmanager.cpp @@ -161,9 +161,10 @@ static QList restoreFromFile(const FileName &fileName) } } if (!restored) - qWarning("Warning: Unable to restore compiler '%s' stored in %s.", - qPrintable(QString::fromUtf8(ToolChainFactory::idFromMap(tcMap))), - qPrintable(fileName.toUserOutput())); + qWarning("Warning: '%s': Unable to restore compiler type '%s' for tool chain %s.", + qPrintable(fileName.toUserOutput()), + qPrintable(ToolChainFactory::typeIdFromMap(tcMap).toString()), + qPrintable(QString::fromUtf8(ToolChainFactory::idFromMap(tcMap)))); } return result; diff --git a/src/plugins/projectexplorer/wincetoolchain.cpp b/src/plugins/projectexplorer/wincetoolchain.cpp index 1b0e92fc70f..0c7069b05aa 100644 --- a/src/plugins/projectexplorer/wincetoolchain.cpp +++ b/src/plugins/projectexplorer/wincetoolchain.cpp @@ -432,7 +432,7 @@ QString WinCEToolChain::autoDetectCdbDebugger(QStringList *checkedDirectories /* bool WinCEToolChainFactory::canRestore(const QVariantMap &data) { - return idFromMap(data).startsWith(QByteArray(Constants::WINCE_TOOLCHAIN_ID) + ':'); + return typeIdFromMap(data) == Constants::WINCE_TOOLCHAIN_ID; } bool WinCEToolChain::operator ==(const ToolChain &other) const diff --git a/src/plugins/qnx/qnxtoolchain.cpp b/src/plugins/qnx/qnxtoolchain.cpp index 73337eb75d2..a7833e0d6ee 100644 --- a/src/plugins/qnx/qnxtoolchain.cpp +++ b/src/plugins/qnx/qnxtoolchain.cpp @@ -163,8 +163,7 @@ QnxToolChainFactory::QnxToolChainFactory() bool QnxToolChainFactory::canRestore(const QVariantMap &data) { - const QByteArray id = idFromMap(data); - return id.startsWith(QByteArray(Constants::QNX_TOOLCHAIN_ID) + ':'); + return typeIdFromMap(data) == Constants::QNX_TOOLCHAIN_ID; } ToolChain *QnxToolChainFactory::restore(const QVariantMap &data)