summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhjk <hjk@qt.io>2019-02-14 11:02:28 +0100
committerhjk <hjk@qt.io>2019-02-15 15:50:50 +0000
commit3007105d86be5bfd3016277eedb557cda01eeabf (patch)
tree42f1696acce015cc9971ceedd3a16a09721ef3ef
parentec6b38dea0a9c7f5b2b45dff6cbb2b1479f44878 (diff)
downloadqt-creator-3007105d86be5bfd3016277eedb557cda01eeabf.tar.gz
QtSupport: Split QtVersionFactory::create()
... into a 'canCreate()' and the actual creation, which can be done by the already registered m_creator. Simpler interface, with the (temporary) regression that the EmbeddedLinuxQtVersion get constructed twice, once only to determine that it should be alive afterwards. Will be fixed later. Change-Id: I5da2cafe473b25a0207bbd628632c9a259780361 Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
-rw-r--r--src/plugins/android/androidqtversionfactory.cpp14
-rw-r--r--src/plugins/android/androidqtversionfactory.h2
-rw-r--r--src/plugins/ios/iosqtversionfactory.cpp6
-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/desktopqtversionfactory.cpp8
-rw-r--r--src/plugins/qtsupport/desktopqtversionfactory.h2
-rw-r--r--src/plugins/qtsupport/qtversionfactory.cpp16
-rw-r--r--src/plugins/qtsupport/qtversionfactory.h4
-rw-r--r--src/plugins/remotelinux/embeddedlinuxqtversionfactory.cpp14
-rw-r--r--src/plugins/remotelinux/embeddedlinuxqtversionfactory.h2
-rw-r--r--src/plugins/winrt/winrtqtversionfactory.cpp18
-rw-r--r--src/plugins/winrt/winrtqtversionfactory.h4
14 files changed, 45 insertions, 56 deletions
diff --git a/src/plugins/android/androidqtversionfactory.cpp b/src/plugins/android/androidqtversionfactory.cpp
index 358f73583a..52082d1af5 100644
--- a/src/plugins/android/androidqtversionfactory.cpp
+++ b/src/plugins/android/androidqtversionfactory.cpp
@@ -40,14 +40,14 @@ AndroidQtVersionFactory::AndroidQtVersionFactory()
setPriority(90);
}
-QtSupport::BaseQtVersion *AndroidQtVersionFactory::create(ProFileEvaluator *evaluator)
+bool AndroidQtVersionFactory::canCreate(ProFileEvaluator *evaluator) const
{
- if (!evaluator->values(QLatin1String("CONFIG")).contains(QLatin1String("android"))
- && evaluator->value(QLatin1String("QMAKE_PLATFORM")) != QLatin1String("android"))
- return nullptr;
- if (evaluator->values(QLatin1String("CONFIG")).contains(QLatin1String("android-no-sdk")))
- return nullptr;
- return new AndroidQtVersion;
+ if (!evaluator->values("CONFIG").contains("android")
+ && evaluator->value("QMAKE_PLATFORM") != "android")
+ return false;
+ if (evaluator->values("CONFIG").contains("android-no-sdk"))
+ return false;
+ return true;
}
} // Internal
diff --git a/src/plugins/android/androidqtversionfactory.h b/src/plugins/android/androidqtversionfactory.h
index 5c9d0f5893..b630bf3919 100644
--- a/src/plugins/android/androidqtversionfactory.h
+++ b/src/plugins/android/androidqtversionfactory.h
@@ -35,7 +35,7 @@ class AndroidQtVersionFactory : public QtSupport::QtVersionFactory
public:
AndroidQtVersionFactory();
- QtSupport::BaseQtVersion *create(ProFileEvaluator *evaluator) override;
+ bool canCreate(ProFileEvaluator *evaluator) const override;
};
} // namespace Internal
diff --git a/src/plugins/ios/iosqtversionfactory.cpp b/src/plugins/ios/iosqtversionfactory.cpp
index ebdbd74c5a..8d118fe29c 100644
--- a/src/plugins/ios/iosqtversionfactory.cpp
+++ b/src/plugins/ios/iosqtversionfactory.cpp
@@ -39,11 +39,9 @@ IosQtVersionFactory::IosQtVersionFactory()
setPriority(90);
}
-QtSupport::BaseQtVersion *IosQtVersionFactory::create(ProFileEvaluator *evaluator)
+bool IosQtVersionFactory::canCreate(ProFileEvaluator *evaluator) const
{
- if (!(evaluator->values(QLatin1String("QMAKE_PLATFORM")).contains(QLatin1String("ios"))))
- return nullptr;
- return new IosQtVersion;
+ return evaluator->values("QMAKE_PLATFORM").contains("ios");
}
} // Internal
diff --git a/src/plugins/ios/iosqtversionfactory.h b/src/plugins/ios/iosqtversionfactory.h
index ce912ed60f..6bb18fd176 100644
--- a/src/plugins/ios/iosqtversionfactory.h
+++ b/src/plugins/ios/iosqtversionfactory.h
@@ -35,7 +35,7 @@ class IosQtVersionFactory : public QtSupport::QtVersionFactory
public:
IosQtVersionFactory();
- QtSupport::BaseQtVersion *create(ProFileEvaluator *evaluator) override;
+ bool canCreate(ProFileEvaluator *evaluator) const override;
};
} // namespace Internal
diff --git a/src/plugins/qnx/qnxqtversionfactory.cpp b/src/plugins/qnx/qnxqtversionfactory.cpp
index eea7f49243..ad484ddc04 100644
--- a/src/plugins/qnx/qnxqtversionfactory.cpp
+++ b/src/plugins/qnx/qnxqtversionfactory.cpp
@@ -40,10 +40,7 @@ QnxQtVersionFactory::QnxQtVersionFactory()
setPriority(50);
}
-QtSupport::BaseQtVersion *QnxQtVersionFactory::create(ProFileEvaluator *evaluator)
+bool QnxQtVersionFactory::canCreate(ProFileEvaluator *evaluator) const
{
- if (evaluator->contains(QLatin1String("QNX_CPUDIR")))
- return new QnxQtVersion;
-
- return nullptr;
+ return evaluator->contains("QNX_CPUDIR");
}
diff --git a/src/plugins/qnx/qnxqtversionfactory.h b/src/plugins/qnx/qnxqtversionfactory.h
index 5c3aabb520..4abdeaf31b 100644
--- a/src/plugins/qnx/qnxqtversionfactory.h
+++ b/src/plugins/qnx/qnxqtversionfactory.h
@@ -35,7 +35,7 @@ class QnxQtVersionFactory : public QtSupport::QtVersionFactory
public:
QnxQtVersionFactory();
- QtSupport::BaseQtVersion *create(ProFileEvaluator *evaluator) override;
+ bool canCreate(ProFileEvaluator *evaluator) const override;
};
} // namespace Internal
diff --git a/src/plugins/qtsupport/desktopqtversionfactory.cpp b/src/plugins/qtsupport/desktopqtversionfactory.cpp
index 368fef9026..b7a8bcea90 100644
--- a/src/plugins/qtsupport/desktopqtversionfactory.cpp
+++ b/src/plugins/qtsupport/desktopqtversionfactory.cpp
@@ -35,11 +35,5 @@ DesktopQtVersionFactory::DesktopQtVersionFactory()
setQtVersionCreator([] { return new DesktopQtVersion; });
setSupportedType(Constants::DESKTOPQT);
setPriority(0); // Lowest of all, we want to be the fallback
-}
-
-BaseQtVersion *DesktopQtVersionFactory::create(ProFileEvaluator *evaluator)
-{
- Q_UNUSED(evaluator);
- // we are the fallback :) so we don't care what kind of qt it is
- return new DesktopQtVersion;
+ // No further restrictions. We are the fallback :) so we don't care what kind of qt it is.
}
diff --git a/src/plugins/qtsupport/desktopqtversionfactory.h b/src/plugins/qtsupport/desktopqtversionfactory.h
index d2d12e2f95..00d308456e 100644
--- a/src/plugins/qtsupport/desktopqtversionfactory.h
+++ b/src/plugins/qtsupport/desktopqtversionfactory.h
@@ -34,8 +34,6 @@ class DesktopQtVersionFactory : public QtVersionFactory
{
public:
DesktopQtVersionFactory();
-
- BaseQtVersion *create(ProFileEvaluator *evaluator) override;
};
} // Internal
diff --git a/src/plugins/qtsupport/qtversionfactory.cpp b/src/plugins/qtsupport/qtversionfactory.cpp
index 4a00a199be..99c5e62478 100644
--- a/src/plugins/qtsupport/qtversionfactory.cpp
+++ b/src/plugins/qtsupport/qtversionfactory.cpp
@@ -71,6 +71,18 @@ 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;
@@ -98,7 +110,9 @@ BaseQtVersion *QtVersionFactory::createQtVersionFromQMakePath(const Utils::FileN
return nullptr;
foreach (QtVersionFactory *factory, factories) {
- if (BaseQtVersion *ver = factory->create(&evaluator)) {
+ if (factory->canCreate(&evaluator)) {
+ BaseQtVersion *ver = factory->create();
+ QTC_ASSERT(ver, continue);
ver->setupQmakePathAndId(qmakePath);
ver->setAutoDetectionSource(autoDetectionSource);
ver->setIsAutodetected(isAutoDetected);
diff --git a/src/plugins/qtsupport/qtversionfactory.h b/src/plugins/qtsupport/qtversionfactory.h
index c66a87a740..59c8545157 100644
--- a/src/plugins/qtsupport/qtversionfactory.h
+++ b/src/plugins/qtsupport/qtversionfactory.h
@@ -54,7 +54,9 @@ public:
/// a qtversion, the priority of the desktop factory is 0 and
/// the desktop factory claims to handle all paths
int priority() const { return m_priority; }
- virtual BaseQtVersion *create(ProFileEvaluator *evaluator) = 0;
+
+ BaseQtVersion *create() const;
+ virtual bool canCreate(ProFileEvaluator *evaluator) const;
static BaseQtVersion *createQtVersionFromQMakePath(
const Utils::FileName &qmakePath, bool isAutoDetected = false,
diff --git a/src/plugins/remotelinux/embeddedlinuxqtversionfactory.cpp b/src/plugins/remotelinux/embeddedlinuxqtversionfactory.cpp
index 74b7bd106a..1ff52d2960 100644
--- a/src/plugins/remotelinux/embeddedlinuxqtversionfactory.cpp
+++ b/src/plugins/remotelinux/embeddedlinuxqtversionfactory.cpp
@@ -40,21 +40,17 @@ EmbeddedLinuxQtVersionFactory::EmbeddedLinuxQtVersionFactory()
setPriority(10);
}
-QtSupport::BaseQtVersion *EmbeddedLinuxQtVersionFactory::create(ProFileEvaluator *evaluator)
+bool EmbeddedLinuxQtVersionFactory::canCreate(ProFileEvaluator *evaluator) const
{
Q_UNUSED(evaluator);
- auto version = new EmbeddedLinuxQtVersion;
+ EmbeddedLinuxQtVersion tempVersion;
+ QList<ProjectExplorer::Abi> abis = tempVersion.qtAbis();
- QList<ProjectExplorer::Abi> abis = version->qtAbis();
// Note: This fails for e.g. intel/meego cross builds on x86 linux machines.
- if (abis.count() == 1
+ return abis.count() == 1
&& abis.at(0).os() == ProjectExplorer::Abi::LinuxOS
- && !ProjectExplorer::Abi::hostAbi().isCompatibleWith(abis.at(0)))
- return version;
-
- delete version;
- return nullptr;
+ && !ProjectExplorer::Abi::hostAbi().isCompatibleWith(abis.at(0));
}
} // namespace Internal
diff --git a/src/plugins/remotelinux/embeddedlinuxqtversionfactory.h b/src/plugins/remotelinux/embeddedlinuxqtversionfactory.h
index 7e341acb2f..11dbdf6480 100644
--- a/src/plugins/remotelinux/embeddedlinuxqtversionfactory.h
+++ b/src/plugins/remotelinux/embeddedlinuxqtversionfactory.h
@@ -35,7 +35,7 @@ class EmbeddedLinuxQtVersionFactory : public QtSupport::QtVersionFactory
public:
EmbeddedLinuxQtVersionFactory();
- QtSupport::BaseQtVersion *create(ProFileEvaluator *evaluator) override;
+ bool canCreate(ProFileEvaluator *evaluator) const override;
};
} // Internal
diff --git a/src/plugins/winrt/winrtqtversionfactory.cpp b/src/plugins/winrt/winrtqtversionfactory.cpp
index 38ebe45ba8..c8fe397000 100644
--- a/src/plugins/winrt/winrtqtversionfactory.cpp
+++ b/src/plugins/winrt/winrtqtversionfactory.cpp
@@ -40,14 +40,9 @@ WinRtQtVersionFactory::WinRtQtVersionFactory()
setPriority(10);
}
-QtSupport::BaseQtVersion *WinRtQtVersionFactory::create(ProFileEvaluator *evaluator)
+bool WinRtQtVersionFactory::canCreate(ProFileEvaluator *evaluator) const
{
- foreach (const QString &value, evaluator->values(QLatin1String("QMAKE_PLATFORM"))) {
- if (value == QStringLiteral("winrt"))
- return new WinRtQtVersion;
- }
-
- return nullptr;
+ return evaluator->values("QMAKE_PLATFORM").contains("winrt");
}
@@ -59,14 +54,9 @@ WinRtPhoneQtVersionFactory::WinRtPhoneQtVersionFactory()
setPriority(10);
}
-QtSupport::BaseQtVersion *WinRtPhoneQtVersionFactory::create(ProFileEvaluator *evaluator)
+bool WinRtPhoneQtVersionFactory::canCreate(ProFileEvaluator *evaluator) const
{
- foreach (const QString &value, evaluator->values(QLatin1String("QMAKE_PLATFORM"))) {
- if (value == QStringLiteral("winphone"))
- return new WinRtPhoneQtVersion;
- }
-
- return nullptr;
+ return evaluator->values("QMAKE_PLATFORM").contains("winphone");
}
} // Internal
diff --git a/src/plugins/winrt/winrtqtversionfactory.h b/src/plugins/winrt/winrtqtversionfactory.h
index 1b778ff003..302a3ecf8d 100644
--- a/src/plugins/winrt/winrtqtversionfactory.h
+++ b/src/plugins/winrt/winrtqtversionfactory.h
@@ -35,7 +35,7 @@ class WinRtQtVersionFactory : public QtSupport::QtVersionFactory
public:
WinRtQtVersionFactory();
- QtSupport::BaseQtVersion *create(ProFileEvaluator *evaluator) override;
+ bool canCreate(ProFileEvaluator *evaluator) const override;
};
class WinRtPhoneQtVersionFactory : public QtSupport::QtVersionFactory
@@ -43,7 +43,7 @@ class WinRtPhoneQtVersionFactory : public QtSupport::QtVersionFactory
public:
WinRtPhoneQtVersionFactory();
- QtSupport::BaseQtVersion *create(ProFileEvaluator *evaluator) override;
+ bool canCreate(ProFileEvaluator *evaluator) const override;
};
} // Internal