diff options
author | hjk <hjk@qt.io> | 2019-02-14 12:15:48 +0100 |
---|---|---|
committer | hjk <hjk@qt.io> | 2019-02-15 16:07:11 +0000 |
commit | 7563cd6d394be51d38859175f336ead15a7df721 (patch) | |
tree | 9fdf89aa975030bde414b698452b18d1a50cbf2a /src/plugins | |
parent | 4079dd5cbccc6471005d5e5ab86a564de02aa5c0 (diff) |
QtSupport: Replace QtVersionFactory::canCreate
... by a functor checking some ad-hoc custom structure content.
This effectively replaces one ugliness (access to qmake specific
variable via qmake specific ProFileEvaluator) by an indirection
layer with similarly ungeneric contents, but I like the latter
setup better.
Change-Id: Iaee07c992fce4aabee2f4eae32a2413d772fe945
Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src/plugins')
-rw-r--r-- | src/plugins/android/androidqtversionfactory.cpp | 16 | ||||
-rw-r--r-- | src/plugins/android/androidqtversionfactory.h | 2 | ||||
-rw-r--r-- | src/plugins/ios/iosqtversionfactory.cpp | 9 | ||||
-rw-r--r-- | src/plugins/ios/iosqtversionfactory.h | 2 | ||||
-rw-r--r-- | src/plugins/qnx/qnxqtversionfactory.cpp | 7 | ||||
-rw-r--r-- | src/plugins/qnx/qnxqtversionfactory.h | 2 | ||||
-rw-r--r-- | src/plugins/qtsupport/qtversionfactory.cpp | 27 | ||||
-rw-r--r-- | src/plugins/qtsupport/qtversionfactory.h | 16 | ||||
-rw-r--r-- | src/plugins/remotelinux/embeddedlinuxqtversionfactory.cpp | 21 | ||||
-rw-r--r-- | src/plugins/remotelinux/embeddedlinuxqtversionfactory.h | 2 | ||||
-rw-r--r-- | src/plugins/winrt/winrtqtversionfactory.cpp | 16 | ||||
-rw-r--r-- | src/plugins/winrt/winrtqtversionfactory.h | 4 |
12 files changed, 41 insertions, 83 deletions
diff --git a/src/plugins/android/androidqtversionfactory.cpp b/src/plugins/android/androidqtversionfactory.cpp index e3b19ae31c6..55f66845ed8 100644 --- a/src/plugins/android/androidqtversionfactory.cpp +++ b/src/plugins/android/androidqtversionfactory.cpp @@ -26,9 +26,6 @@ #include "androidqtversionfactory.h" #include "androidqtversion.h" #include "androidconstants.h" -#include <qtsupport/qtsupportconstants.h> -#include <utils/qtcassert.h> -#include <proparser/profileevaluator.h> namespace Android { namespace Internal { @@ -38,15 +35,12 @@ AndroidQtVersionFactory::AndroidQtVersionFactory() setQtVersionCreator([] { return new AndroidQtVersion; }); setSupportedType(Constants::ANDROIDQT); setPriority(90); -} - -bool AndroidQtVersionFactory::canCreate(ProFileEvaluator *evaluator) const -{ - if (evaluator->values("CONFIG").contains("android-no-sdk")) - return false; - return evaluator->values("CONFIG").contains("android") - || evaluator->value("QMAKE_PLATFORM") == "android"; + setRestrictionChecker([](const SetupData &setup) { + return !setup.config.contains("android-no-sdk") + && (setup.config.contains("android") + || setup.platforms.contains("android")); + }); } } // Internal diff --git a/src/plugins/android/androidqtversionfactory.h b/src/plugins/android/androidqtversionfactory.h index b630bf3919d..911e87fd839 100644 --- a/src/plugins/android/androidqtversionfactory.h +++ b/src/plugins/android/androidqtversionfactory.h @@ -34,8 +34,6 @@ class AndroidQtVersionFactory : public QtSupport::QtVersionFactory { public: AndroidQtVersionFactory(); - - bool canCreate(ProFileEvaluator *evaluator) const override; }; } // namespace Internal diff --git a/src/plugins/ios/iosqtversionfactory.cpp b/src/plugins/ios/iosqtversionfactory.cpp index 8d118fe29c2..c0e4421c2c5 100644 --- a/src/plugins/ios/iosqtversionfactory.cpp +++ b/src/plugins/ios/iosqtversionfactory.cpp @@ -26,8 +26,6 @@ #include "iosqtversionfactory.h" #include "iosqtversion.h" #include "iosconstants.h" -#include <qtsupport/qtsupportconstants.h> -#include <proparser/profileevaluator.h> namespace Ios { namespace Internal { @@ -37,11 +35,10 @@ IosQtVersionFactory::IosQtVersionFactory() setQtVersionCreator([] { return new IosQtVersion; }); setSupportedType(Constants::IOSQT); setPriority(90); -} -bool IosQtVersionFactory::canCreate(ProFileEvaluator *evaluator) const -{ - return evaluator->values("QMAKE_PLATFORM").contains("ios"); + setRestrictionChecker([](const SetupData &setup) { + return setup.platforms.contains("ios"); + }); } } // Internal diff --git a/src/plugins/ios/iosqtversionfactory.h b/src/plugins/ios/iosqtversionfactory.h index 6bb18fd1765..37219ed44ed 100644 --- a/src/plugins/ios/iosqtversionfactory.h +++ b/src/plugins/ios/iosqtversionfactory.h @@ -34,8 +34,6 @@ class IosQtVersionFactory : public QtSupport::QtVersionFactory { public: IosQtVersionFactory(); - - bool canCreate(ProFileEvaluator *evaluator) const override; }; } // namespace Internal diff --git a/src/plugins/qnx/qnxqtversionfactory.cpp b/src/plugins/qnx/qnxqtversionfactory.cpp index ad484ddc04a..883b0e61e15 100644 --- a/src/plugins/qnx/qnxqtversionfactory.cpp +++ b/src/plugins/qnx/qnxqtversionfactory.cpp @@ -28,8 +28,6 @@ #include "qnxconstants.h" #include "qnxqtversion.h" -#include <qtsupport/profilereader.h> - using namespace Qnx; using namespace Qnx::Internal; @@ -38,9 +36,6 @@ QnxQtVersionFactory::QnxQtVersionFactory() setQtVersionCreator([] { return new QnxQtVersion; }); setSupportedType(Constants::QNX_QNX_QT); setPriority(50); + setRestrictionChecker([](const SetupData &setup) { return setup.isQnx; }); } -bool QnxQtVersionFactory::canCreate(ProFileEvaluator *evaluator) const -{ - return evaluator->contains("QNX_CPUDIR"); -} diff --git a/src/plugins/qnx/qnxqtversionfactory.h b/src/plugins/qnx/qnxqtversionfactory.h index 4abdeaf31bb..db1df3cbfd9 100644 --- a/src/plugins/qnx/qnxqtversionfactory.h +++ b/src/plugins/qnx/qnxqtversionfactory.h @@ -34,8 +34,6 @@ class QnxQtVersionFactory : public QtSupport::QtVersionFactory { public: QnxQtVersionFactory(); - - bool canCreate(ProFileEvaluator *evaluator) const override; }; } // namespace Internal diff --git a/src/plugins/qtsupport/qtversionfactory.cpp b/src/plugins/qtsupport/qtversionfactory.cpp index 99c5e62478c..d517ff89e05 100644 --- a/src/plugins/qtsupport/qtversionfactory.cpp +++ b/src/plugins/qtsupport/qtversionfactory.cpp @@ -71,18 +71,6 @@ BaseQtVersion *QtVersionFactory::restore(const QString &type, const QVariantMap return version; } -BaseQtVersion *QtVersionFactory::create() const -{ - QTC_ASSERT(m_creator, return nullptr); - return m_creator(); -} - -bool QtVersionFactory::canCreate(ProFileEvaluator *evaluator) const -{ - Q_UNUSED(evaluator); - return true; -} - BaseQtVersion *QtVersionFactory::createQtVersionFromQMakePath(const Utils::FileName &qmakePath, bool isAutoDetected, const QString &autoDetectionSource, QString *error) { QHash<ProKey, ProString> versionInfo; @@ -109,9 +97,15 @@ BaseQtVersion *QtVersionFactory::createQtVersionFromQMakePath(const Utils::FileN if (!fi.exists() || !fi.isExecutable() || !fi.isFile()) return nullptr; + SetupData setup; + setup.config = evaluator.values("CONFIG"); + setup.platforms = evaluator.values("QMAKE_PLATFORM"); // It's a list in general. + setup.isQnx = !evaluator.value("QNX_CPUDIR").isEmpty(); + foreach (QtVersionFactory *factory, factories) { - if (factory->canCreate(&evaluator)) { - BaseQtVersion *ver = factory->create(); + if (!factory->m_restrictionChecker || factory->m_restrictionChecker(setup)) { + QTC_ASSERT(factory->m_creator, continue); + BaseQtVersion *ver = factory->m_creator(); QTC_ASSERT(ver, continue); ver->setupQmakePathAndId(qmakePath); ver->setAutoDetectionSource(autoDetectionSource); @@ -133,6 +127,11 @@ void QtVersionFactory::setQtVersionCreator(const std::function<BaseQtVersion *() m_creator = creator; } +void QtVersionFactory::setRestrictionChecker(const std::function<bool(const SetupData &)> &checker) +{ + m_restrictionChecker = checker; +} + void QtVersionFactory::setSupportedType(const QString &type) { m_supportedType = type; diff --git a/src/plugins/qtsupport/qtversionfactory.h b/src/plugins/qtsupport/qtversionfactory.h index 59c85451576..9a34196d3a4 100644 --- a/src/plugins/qtsupport/qtversionfactory.h +++ b/src/plugins/qtsupport/qtversionfactory.h @@ -29,10 +29,6 @@ #include <QVariantMap> -QT_BEGIN_NAMESPACE -class ProFileEvaluator; -QT_END_NAMESPACE - namespace Utils { class FileName; } namespace QtSupport { @@ -55,20 +51,26 @@ public: /// the desktop factory claims to handle all paths int priority() const { return m_priority; } - BaseQtVersion *create() const; - virtual bool canCreate(ProFileEvaluator *evaluator) const; - static BaseQtVersion *createQtVersionFromQMakePath( const Utils::FileName &qmakePath, bool isAutoDetected = false, const QString &autoDetectionSource = QString(), QString *error = nullptr); protected: + struct SetupData + { + QStringList platforms; + QStringList config; + bool isQnx = false; // eeks... + }; + void setQtVersionCreator(const std::function<BaseQtVersion *()> &creator); + void setRestrictionChecker(const std::function<bool(const SetupData &)> &checker); void setSupportedType(const QString &type); void setPriority(int priority); private: std::function<BaseQtVersion *()> m_creator; + std::function<bool(const SetupData &)> m_restrictionChecker; QString m_supportedType; int m_priority = 0; }; diff --git a/src/plugins/remotelinux/embeddedlinuxqtversionfactory.cpp b/src/plugins/remotelinux/embeddedlinuxqtversionfactory.cpp index 1ff52d29603..e657e81fa43 100644 --- a/src/plugins/remotelinux/embeddedlinuxqtversionfactory.cpp +++ b/src/plugins/remotelinux/embeddedlinuxqtversionfactory.cpp @@ -28,8 +28,6 @@ #include "embeddedlinuxqtversion.h" #include "remotelinux_constants.h" -#include <QFileInfo> - namespace RemoteLinux { namespace Internal { @@ -38,19 +36,16 @@ EmbeddedLinuxQtVersionFactory::EmbeddedLinuxQtVersionFactory() setQtVersionCreator([] { return new EmbeddedLinuxQtVersion; }); setSupportedType(RemoteLinux::Constants::EMBEDDED_LINUX_QT); setPriority(10); -} - -bool EmbeddedLinuxQtVersionFactory::canCreate(ProFileEvaluator *evaluator) const -{ - Q_UNUSED(evaluator); - EmbeddedLinuxQtVersion tempVersion; - QList<ProjectExplorer::Abi> abis = tempVersion.qtAbis(); + setRestrictionChecker([](const SetupData &) { + EmbeddedLinuxQtVersion tempVersion; + QList<ProjectExplorer::Abi> abis = tempVersion.qtAbis(); - // Note: This fails for e.g. intel/meego cross builds on x86 linux machines. - return abis.count() == 1 - && abis.at(0).os() == ProjectExplorer::Abi::LinuxOS - && !ProjectExplorer::Abi::hostAbi().isCompatibleWith(abis.at(0)); + // Note: This fails for e.g. intel/meego cross builds on x86 linux machines. + return abis.count() == 1 + && abis.at(0).os() == ProjectExplorer::Abi::LinuxOS + && !ProjectExplorer::Abi::hostAbi().isCompatibleWith(abis.at(0)); + }); } } // namespace Internal diff --git a/src/plugins/remotelinux/embeddedlinuxqtversionfactory.h b/src/plugins/remotelinux/embeddedlinuxqtversionfactory.h index 11dbdf64807..2bcbbcae40a 100644 --- a/src/plugins/remotelinux/embeddedlinuxqtversionfactory.h +++ b/src/plugins/remotelinux/embeddedlinuxqtversionfactory.h @@ -34,8 +34,6 @@ class EmbeddedLinuxQtVersionFactory : public QtSupport::QtVersionFactory { public: EmbeddedLinuxQtVersionFactory(); - - bool canCreate(ProFileEvaluator *evaluator) const override; }; } // Internal diff --git a/src/plugins/winrt/winrtqtversionfactory.cpp b/src/plugins/winrt/winrtqtversionfactory.cpp index c8fe3970007..dfb30d8ed38 100644 --- a/src/plugins/winrt/winrtqtversionfactory.cpp +++ b/src/plugins/winrt/winrtqtversionfactory.cpp @@ -28,8 +28,6 @@ #include "winrtconstants.h" #include "winrtphoneqtversion.h" -#include <proparser/profileevaluator.h> - namespace WinRt { namespace Internal { @@ -37,27 +35,17 @@ WinRtQtVersionFactory::WinRtQtVersionFactory() { setQtVersionCreator([] { return new WinRtQtVersion; }); setSupportedType(Constants::WINRT_WINRTQT); + setRestrictionChecker([](const SetupData &setup) { return setup.platforms.contains("winrt"); }); setPriority(10); } -bool WinRtQtVersionFactory::canCreate(ProFileEvaluator *evaluator) const -{ - return evaluator->values("QMAKE_PLATFORM").contains("winrt"); -} - - - WinRtPhoneQtVersionFactory::WinRtPhoneQtVersionFactory() { setQtVersionCreator([] { return new WinRtPhoneQtVersion; }); setSupportedType(Constants::WINRT_WINPHONEQT); + setRestrictionChecker([](const SetupData &setup) { return setup.platforms.contains("winphone"); }); setPriority(10); } -bool WinRtPhoneQtVersionFactory::canCreate(ProFileEvaluator *evaluator) const -{ - return evaluator->values("QMAKE_PLATFORM").contains("winphone"); -} - } // Internal } // WinRt diff --git a/src/plugins/winrt/winrtqtversionfactory.h b/src/plugins/winrt/winrtqtversionfactory.h index 302a3ecf8d7..510a3307528 100644 --- a/src/plugins/winrt/winrtqtversionfactory.h +++ b/src/plugins/winrt/winrtqtversionfactory.h @@ -34,16 +34,12 @@ class WinRtQtVersionFactory : public QtSupport::QtVersionFactory { public: WinRtQtVersionFactory(); - - bool canCreate(ProFileEvaluator *evaluator) const override; }; class WinRtPhoneQtVersionFactory : public QtSupport::QtVersionFactory { public: WinRtPhoneQtVersionFactory(); - - bool canCreate(ProFileEvaluator *evaluator) const override; }; } // Internal |