aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2019-02-14 12:15:48 +0100
committerhjk <hjk@qt.io>2019-02-15 16:07:11 +0000
commit7563cd6d394be51d38859175f336ead15a7df721 (patch)
tree9fdf89aa975030bde414b698452b18d1a50cbf2a /src/plugins
parent4079dd5cbccc6471005d5e5ab86a564de02aa5c0 (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.cpp16
-rw-r--r--src/plugins/android/androidqtversionfactory.h2
-rw-r--r--src/plugins/ios/iosqtversionfactory.cpp9
-rw-r--r--src/plugins/ios/iosqtversionfactory.h2
-rw-r--r--src/plugins/qnx/qnxqtversionfactory.cpp7
-rw-r--r--src/plugins/qnx/qnxqtversionfactory.h2
-rw-r--r--src/plugins/qtsupport/qtversionfactory.cpp27
-rw-r--r--src/plugins/qtsupport/qtversionfactory.h16
-rw-r--r--src/plugins/remotelinux/embeddedlinuxqtversionfactory.cpp21
-rw-r--r--src/plugins/remotelinux/embeddedlinuxqtversionfactory.h2
-rw-r--r--src/plugins/winrt/winrtqtversionfactory.cpp16
-rw-r--r--src/plugins/winrt/winrtqtversionfactory.h4
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