From 5b03c1e0593ed27e80d42791247e3344d37e00f0 Mon Sep 17 00:00:00 2001 From: hjk Date: Wed, 13 Feb 2019 18:45:41 +0100 Subject: [PATCH] QtSupport et al: Centralize QtVersionFactory::restore Similar to the various types of project *ConfigurationFactory Change-Id: I7b721f127c8bcc13c7db6880d36c79dd091bc037 Reviewed-by: Christian Kandeler --- .../android/androidqtversionfactory.cpp | 10 +-------- src/plugins/android/androidqtversionfactory.h | 1 - src/plugins/ios/iosqtversionfactory.cpp | 11 +--------- src/plugins/ios/iosqtversionfactory.h | 1 - src/plugins/qnx/qnxqtversionfactory.cpp | 10 +-------- src/plugins/qnx/qnxqtversionfactory.h | 1 - .../qtsupport/desktopqtversionfactory.cpp | 11 +--------- .../qtsupport/desktopqtversionfactory.h | 1 - src/plugins/qtsupport/qtversionfactory.cpp | 16 ++++++++++++++ src/plugins/qtsupport/qtversionfactory.h | 8 ++++++- .../embeddedlinuxqtversionfactory.cpp | 10 +-------- .../embeddedlinuxqtversionfactory.h | 1 - src/plugins/winrt/winrtqtversionfactory.cpp | 22 ++----------------- src/plugins/winrt/winrtqtversionfactory.h | 2 -- 14 files changed, 30 insertions(+), 75 deletions(-) diff --git a/src/plugins/android/androidqtversionfactory.cpp b/src/plugins/android/androidqtversionfactory.cpp index 00df010def5..1b56247ad1f 100644 --- a/src/plugins/android/androidqtversionfactory.cpp +++ b/src/plugins/android/androidqtversionfactory.cpp @@ -38,6 +38,7 @@ namespace Internal { AndroidQtVersionFactory::AndroidQtVersionFactory(QObject *parent) : QtSupport::QtVersionFactory(parent) { + setQtVersionCreator([] { return new AndroidQtVersion; }); } bool AndroidQtVersionFactory::canRestore(const QString &type) @@ -45,15 +46,6 @@ bool AndroidQtVersionFactory::canRestore(const QString &type) return type == QLatin1String(Constants::ANDROIDQT); } -QtSupport::BaseQtVersion *AndroidQtVersionFactory::restore(const QString &type, - const QVariantMap &data) -{ - QTC_ASSERT(canRestore(type), return nullptr); - auto v = new AndroidQtVersion; - v->fromMap(data); - return v; -} - int AndroidQtVersionFactory::priority() const { return 90; diff --git a/src/plugins/android/androidqtversionfactory.h b/src/plugins/android/androidqtversionfactory.h index 92d2e44725e..e0a5bfd31b7 100644 --- a/src/plugins/android/androidqtversionfactory.h +++ b/src/plugins/android/androidqtversionfactory.h @@ -36,7 +36,6 @@ public: explicit AndroidQtVersionFactory(QObject *parent = nullptr); bool canRestore(const QString &type) override; - QtSupport::BaseQtVersion *restore(const QString &type, const QVariantMap &data) override; int priority() const override; QtSupport::BaseQtVersion *create(const Utils::FileName &qmakePath, ProFileEvaluator *evaluator, diff --git a/src/plugins/ios/iosqtversionfactory.cpp b/src/plugins/ios/iosqtversionfactory.cpp index 4ef21af112e..1171c9b211f 100644 --- a/src/plugins/ios/iosqtversionfactory.cpp +++ b/src/plugins/ios/iosqtversionfactory.cpp @@ -27,7 +27,6 @@ #include "iosqtversion.h" #include "iosconstants.h" #include -#include #include #include @@ -38,6 +37,7 @@ namespace Internal { IosQtVersionFactory::IosQtVersionFactory(QObject *parent) : QtSupport::QtVersionFactory(parent) { + setQtVersionCreator([] { return new IosQtVersion; }); } bool IosQtVersionFactory::canRestore(const QString &type) @@ -45,15 +45,6 @@ bool IosQtVersionFactory::canRestore(const QString &type) return type == QLatin1String(Constants::IOSQT); } -QtSupport::BaseQtVersion *IosQtVersionFactory::restore(const QString &type, - const QVariantMap &data) -{ - QTC_ASSERT(canRestore(type), return nullptr); - auto v = new IosQtVersion; - v->fromMap(data); - return v; -} - int IosQtVersionFactory::priority() const { return 90; diff --git a/src/plugins/ios/iosqtversionfactory.h b/src/plugins/ios/iosqtversionfactory.h index 4810e2ee8eb..dc81deac444 100644 --- a/src/plugins/ios/iosqtversionfactory.h +++ b/src/plugins/ios/iosqtversionfactory.h @@ -36,7 +36,6 @@ public: explicit IosQtVersionFactory(QObject *parent = nullptr); bool canRestore(const QString &type) override; - QtSupport::BaseQtVersion *restore(const QString &type, const QVariantMap &data) override; int priority() const override; QtSupport::BaseQtVersion *create(const Utils::FileName &qmakePath, ProFileEvaluator *evaluator, diff --git a/src/plugins/qnx/qnxqtversionfactory.cpp b/src/plugins/qnx/qnxqtversionfactory.cpp index abf2743cc8c..c4c7cb8f4f6 100644 --- a/src/plugins/qnx/qnxqtversionfactory.cpp +++ b/src/plugins/qnx/qnxqtversionfactory.cpp @@ -39,6 +39,7 @@ using namespace Qnx::Internal; QnxQtVersionFactory::QnxQtVersionFactory(QObject *parent) : QtSupport::QtVersionFactory(parent) { + setQtVersionCreator([] { return new QnxQtVersion; }); } QnxQtVersionFactory::~QnxQtVersionFactory() = default; @@ -48,15 +49,6 @@ bool QnxQtVersionFactory::canRestore(const QString &type) return type == QLatin1String(Constants::QNX_QNX_QT); } -QtSupport::BaseQtVersion *QnxQtVersionFactory::restore(const QString &type, const QVariantMap &data) -{ - if (!canRestore(type)) - return nullptr; - auto v = new QnxQtVersion; - v->fromMap(data); - return v; -} - int QnxQtVersionFactory::priority() const { return 50; diff --git a/src/plugins/qnx/qnxqtversionfactory.h b/src/plugins/qnx/qnxqtversionfactory.h index e15165be429..8d47c053f20 100644 --- a/src/plugins/qnx/qnxqtversionfactory.h +++ b/src/plugins/qnx/qnxqtversionfactory.h @@ -38,7 +38,6 @@ public: ~QnxQtVersionFactory() override; bool canRestore(const QString &type) override; - QtSupport::BaseQtVersion *restore(const QString &type, const QVariantMap &data) override; int priority() const override; QtSupport::BaseQtVersion *create(const Utils::FileName &qmakePath, diff --git a/src/plugins/qtsupport/desktopqtversionfactory.cpp b/src/plugins/qtsupport/desktopqtversionfactory.cpp index ac633aa58c3..893e90c8366 100644 --- a/src/plugins/qtsupport/desktopqtversionfactory.cpp +++ b/src/plugins/qtsupport/desktopqtversionfactory.cpp @@ -35,7 +35,7 @@ using namespace QtSupport::Internal; DesktopQtVersionFactory::DesktopQtVersionFactory(QObject *parent) : QtVersionFactory(parent) { - + setQtVersionCreator([] { return new DesktopQtVersion; }); } DesktopQtVersionFactory::~DesktopQtVersionFactory() = default; @@ -45,15 +45,6 @@ bool DesktopQtVersionFactory::canRestore(const QString &type) return type == QLatin1String(Constants::DESKTOPQT); } -BaseQtVersion *DesktopQtVersionFactory::restore(const QString &type, const QVariantMap &data) -{ - if (!canRestore(type)) - return nullptr; - auto v = new DesktopQtVersion; - v->fromMap(data); - return v; -} - int DesktopQtVersionFactory::priority() const { // Lowest of all, we want to be the fallback diff --git a/src/plugins/qtsupport/desktopqtversionfactory.h b/src/plugins/qtsupport/desktopqtversionfactory.h index 7f5f476d450..aa8620f938d 100644 --- a/src/plugins/qtsupport/desktopqtversionfactory.h +++ b/src/plugins/qtsupport/desktopqtversionfactory.h @@ -37,7 +37,6 @@ public: ~DesktopQtVersionFactory() override; bool canRestore(const QString &type) override; - BaseQtVersion *restore(const QString &type, const QVariantMap &data) override; int priority() const override; BaseQtVersion *create(const Utils::FileName &qmakePath, ProFileEvaluator *evaluator, diff --git a/src/plugins/qtsupport/qtversionfactory.cpp b/src/plugins/qtsupport/qtversionfactory.cpp index ebc8ae36eed..9a5147babab 100644 --- a/src/plugins/qtsupport/qtversionfactory.cpp +++ b/src/plugins/qtsupport/qtversionfactory.cpp @@ -30,8 +30,10 @@ #include #include + #include #include +#include using namespace QtSupport; using namespace QtSupport::Internal; @@ -54,6 +56,15 @@ const QList QtVersionFactory::allQtVersionFactories() return g_qtVersionFactories; } +BaseQtVersion *QtVersionFactory::restore(const QString &type, const QVariantMap &data) +{ + QTC_ASSERT(canRestore(type), return nullptr); + QTC_ASSERT(m_creator, return nullptr); + BaseQtVersion *version = m_creator(); + version->fromMap(data); + return version; +} + BaseQtVersion *QtVersionFactory::createQtVersionFromQMakePath(const Utils::FileName &qmakePath, bool isAutoDetected, const QString &autoDetectionSource, QString *error) { QHash versionInfo; @@ -88,3 +99,8 @@ BaseQtVersion *QtVersionFactory::createQtVersionFromQMakePath(const Utils::FileN *error = tr("No factory found for qmake: \"%1\"").arg(qmakePath.toUserOutput()); return 0; } + +void QtVersionFactory::setQtVersionCreator(const std::function &creator) +{ + m_creator = creator; +} diff --git a/src/plugins/qtsupport/qtversionfactory.h b/src/plugins/qtsupport/qtversionfactory.h index fad90280cdb..2834b4da5d2 100644 --- a/src/plugins/qtsupport/qtversionfactory.h +++ b/src/plugins/qtsupport/qtversionfactory.h @@ -52,7 +52,7 @@ public: static const QList allQtVersionFactories(); virtual bool canRestore(const QString &type) = 0; - virtual BaseQtVersion *restore(const QString &type, const QVariantMap &data) = 0; + BaseQtVersion *restore(const QString &type, const QVariantMap &data); /// factories with higher priority are asked first to identify /// a qtversion, the priority of the desktop factory is 0 and @@ -66,6 +66,12 @@ public: static BaseQtVersion *createQtVersionFromQMakePath( const Utils::FileName &qmakePath, bool isAutoDetected = false, const QString &autoDetectionSource = QString(), QString *error = nullptr); + +protected: + void setQtVersionCreator(const std::function &creator); + +private: + std::function m_creator; }; } // namespace QtSupport diff --git a/src/plugins/remotelinux/embeddedlinuxqtversionfactory.cpp b/src/plugins/remotelinux/embeddedlinuxqtversionfactory.cpp index c804c0a0122..5048b581f2f 100644 --- a/src/plugins/remotelinux/embeddedlinuxqtversionfactory.cpp +++ b/src/plugins/remotelinux/embeddedlinuxqtversionfactory.cpp @@ -36,6 +36,7 @@ namespace Internal { EmbeddedLinuxQtVersionFactory::EmbeddedLinuxQtVersionFactory(QObject *parent) : QtSupport::QtVersionFactory(parent) { + setQtVersionCreator([] { return new EmbeddedLinuxQtVersion; }); } EmbeddedLinuxQtVersionFactory::~EmbeddedLinuxQtVersionFactory() = default; @@ -45,15 +46,6 @@ bool EmbeddedLinuxQtVersionFactory::canRestore(const QString &type) return type == QLatin1String(RemoteLinux::Constants::EMBEDDED_LINUX_QT); } -QtSupport::BaseQtVersion *EmbeddedLinuxQtVersionFactory::restore(const QString &type, const QVariantMap &data) -{ - if (!canRestore(type)) - return nullptr; - auto v = new EmbeddedLinuxQtVersion; - v->fromMap(data); - return v; -} - int EmbeddedLinuxQtVersionFactory::priority() const { return 10; diff --git a/src/plugins/remotelinux/embeddedlinuxqtversionfactory.h b/src/plugins/remotelinux/embeddedlinuxqtversionfactory.h index 7737a8de7a9..cde6960acf8 100644 --- a/src/plugins/remotelinux/embeddedlinuxqtversionfactory.h +++ b/src/plugins/remotelinux/embeddedlinuxqtversionfactory.h @@ -37,7 +37,6 @@ public: ~EmbeddedLinuxQtVersionFactory() override; bool canRestore(const QString &type) override; - QtSupport::BaseQtVersion *restore(const QString &type, const QVariantMap &data) override; int priority() const override; QtSupport::BaseQtVersion *create(const Utils::FileName &qmakePath, ProFileEvaluator *evaluator, diff --git a/src/plugins/winrt/winrtqtversionfactory.cpp b/src/plugins/winrt/winrtqtversionfactory.cpp index 828d7b98806..b6ceb5fddff 100644 --- a/src/plugins/winrt/winrtqtversionfactory.cpp +++ b/src/plugins/winrt/winrtqtversionfactory.cpp @@ -38,6 +38,7 @@ namespace Internal { WinRtQtVersionFactory::WinRtQtVersionFactory(QObject *parent) : QtSupport::QtVersionFactory(parent) { + setQtVersionCreator([] { return new WinRtQtVersion; }); } WinRtQtVersionFactory::~WinRtQtVersionFactory() @@ -49,16 +50,6 @@ bool WinRtQtVersionFactory::canRestore(const QString &type) return type == QLatin1String(Constants::WINRT_WINRTQT); } -QtSupport::BaseQtVersion *WinRtQtVersionFactory::restore(const QString &type, - const QVariantMap &data) -{ - if (!canRestore(type)) - return nullptr; - WinRtQtVersion *v = new WinRtQtVersion; - v->fromMap(data); - return v; -} - int WinRtQtVersionFactory::priority() const { return 10; @@ -84,6 +75,7 @@ QtSupport::BaseQtVersion *WinRtQtVersionFactory::create(const Utils::FileName &q WinRtPhoneQtVersionFactory::WinRtPhoneQtVersionFactory(QObject *parent) : QtSupport::QtVersionFactory(parent) { + setQtVersionCreator([] { return new WinRtPhoneQtVersion; }); } bool WinRtPhoneQtVersionFactory::canRestore(const QString &type) @@ -91,16 +83,6 @@ bool WinRtPhoneQtVersionFactory::canRestore(const QString &type) return type == QLatin1String(Constants::WINRT_WINPHONEQT); } -QtSupport::BaseQtVersion *WinRtPhoneQtVersionFactory::restore(const QString &type, - const QVariantMap &data) -{ - if (!canRestore(type)) - return nullptr; - WinRtQtVersion *v = new WinRtPhoneQtVersion; - v->fromMap(data); - return v; -} - int WinRtPhoneQtVersionFactory::priority() const { return 10; diff --git a/src/plugins/winrt/winrtqtversionfactory.h b/src/plugins/winrt/winrtqtversionfactory.h index 3c58775e657..9d443096221 100644 --- a/src/plugins/winrt/winrtqtversionfactory.h +++ b/src/plugins/winrt/winrtqtversionfactory.h @@ -37,7 +37,6 @@ public: ~WinRtQtVersionFactory(); bool canRestore(const QString &type); - QtSupport::BaseQtVersion *restore(const QString &type, const QVariantMap &data); int priority() const; QtSupport::BaseQtVersion *create(const Utils::FileName &qmakePath, ProFileEvaluator *evaluator, @@ -50,7 +49,6 @@ public: explicit WinRtPhoneQtVersionFactory(QObject *parent = nullptr); bool canRestore(const QString &type); - QtSupport::BaseQtVersion *restore(const QString &type, const QVariantMap &data); int priority() const; QtSupport::BaseQtVersion *create(const Utils::FileName &qmakePath, ProFileEvaluator *evaluator,