forked from qt-creator/qt-creator
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>
This commit is contained in:
@@ -40,14 +40,14 @@ AndroidQtVersionFactory::AndroidQtVersionFactory()
|
|||||||
setPriority(90);
|
setPriority(90);
|
||||||
}
|
}
|
||||||
|
|
||||||
QtSupport::BaseQtVersion *AndroidQtVersionFactory::create(ProFileEvaluator *evaluator)
|
bool AndroidQtVersionFactory::canCreate(ProFileEvaluator *evaluator) const
|
||||||
{
|
{
|
||||||
if (!evaluator->values(QLatin1String("CONFIG")).contains(QLatin1String("android"))
|
if (!evaluator->values("CONFIG").contains("android")
|
||||||
&& evaluator->value(QLatin1String("QMAKE_PLATFORM")) != QLatin1String("android"))
|
&& evaluator->value("QMAKE_PLATFORM") != "android")
|
||||||
return nullptr;
|
return false;
|
||||||
if (evaluator->values(QLatin1String("CONFIG")).contains(QLatin1String("android-no-sdk")))
|
if (evaluator->values("CONFIG").contains("android-no-sdk"))
|
||||||
return nullptr;
|
return false;
|
||||||
return new AndroidQtVersion;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // Internal
|
} // Internal
|
||||||
|
@@ -35,7 +35,7 @@ class AndroidQtVersionFactory : public QtSupport::QtVersionFactory
|
|||||||
public:
|
public:
|
||||||
AndroidQtVersionFactory();
|
AndroidQtVersionFactory();
|
||||||
|
|
||||||
QtSupport::BaseQtVersion *create(ProFileEvaluator *evaluator) override;
|
bool canCreate(ProFileEvaluator *evaluator) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
|
@@ -39,11 +39,9 @@ IosQtVersionFactory::IosQtVersionFactory()
|
|||||||
setPriority(90);
|
setPriority(90);
|
||||||
}
|
}
|
||||||
|
|
||||||
QtSupport::BaseQtVersion *IosQtVersionFactory::create(ProFileEvaluator *evaluator)
|
bool IosQtVersionFactory::canCreate(ProFileEvaluator *evaluator) const
|
||||||
{
|
{
|
||||||
if (!(evaluator->values(QLatin1String("QMAKE_PLATFORM")).contains(QLatin1String("ios"))))
|
return evaluator->values("QMAKE_PLATFORM").contains("ios");
|
||||||
return nullptr;
|
|
||||||
return new IosQtVersion;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // Internal
|
} // Internal
|
||||||
|
@@ -35,7 +35,7 @@ class IosQtVersionFactory : public QtSupport::QtVersionFactory
|
|||||||
public:
|
public:
|
||||||
IosQtVersionFactory();
|
IosQtVersionFactory();
|
||||||
|
|
||||||
QtSupport::BaseQtVersion *create(ProFileEvaluator *evaluator) override;
|
bool canCreate(ProFileEvaluator *evaluator) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
|
@@ -40,10 +40,7 @@ QnxQtVersionFactory::QnxQtVersionFactory()
|
|||||||
setPriority(50);
|
setPriority(50);
|
||||||
}
|
}
|
||||||
|
|
||||||
QtSupport::BaseQtVersion *QnxQtVersionFactory::create(ProFileEvaluator *evaluator)
|
bool QnxQtVersionFactory::canCreate(ProFileEvaluator *evaluator) const
|
||||||
{
|
{
|
||||||
if (evaluator->contains(QLatin1String("QNX_CPUDIR")))
|
return evaluator->contains("QNX_CPUDIR");
|
||||||
return new QnxQtVersion;
|
|
||||||
|
|
||||||
return nullptr;
|
|
||||||
}
|
}
|
||||||
|
@@ -35,7 +35,7 @@ class QnxQtVersionFactory : public QtSupport::QtVersionFactory
|
|||||||
public:
|
public:
|
||||||
QnxQtVersionFactory();
|
QnxQtVersionFactory();
|
||||||
|
|
||||||
QtSupport::BaseQtVersion *create(ProFileEvaluator *evaluator) override;
|
bool canCreate(ProFileEvaluator *evaluator) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
|
@@ -35,11 +35,5 @@ DesktopQtVersionFactory::DesktopQtVersionFactory()
|
|||||||
setQtVersionCreator([] { return new DesktopQtVersion; });
|
setQtVersionCreator([] { return new DesktopQtVersion; });
|
||||||
setSupportedType(Constants::DESKTOPQT);
|
setSupportedType(Constants::DESKTOPQT);
|
||||||
setPriority(0); // Lowest of all, we want to be the fallback
|
setPriority(0); // Lowest of all, we want to be the fallback
|
||||||
}
|
// No further restrictions. We are the fallback :) so we don't care what kind of qt it is.
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
@@ -34,8 +34,6 @@ class DesktopQtVersionFactory : public QtVersionFactory
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
DesktopQtVersionFactory();
|
DesktopQtVersionFactory();
|
||||||
|
|
||||||
BaseQtVersion *create(ProFileEvaluator *evaluator) override;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // Internal
|
} // Internal
|
||||||
|
@@ -71,6 +71,18 @@ BaseQtVersion *QtVersionFactory::restore(const QString &type, const QVariantMap
|
|||||||
return version;
|
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)
|
BaseQtVersion *QtVersionFactory::createQtVersionFromQMakePath(const Utils::FileName &qmakePath, bool isAutoDetected, const QString &autoDetectionSource, QString *error)
|
||||||
{
|
{
|
||||||
QHash<ProKey, ProString> versionInfo;
|
QHash<ProKey, ProString> versionInfo;
|
||||||
@@ -98,7 +110,9 @@ BaseQtVersion *QtVersionFactory::createQtVersionFromQMakePath(const Utils::FileN
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
foreach (QtVersionFactory *factory, factories) {
|
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->setupQmakePathAndId(qmakePath);
|
||||||
ver->setAutoDetectionSource(autoDetectionSource);
|
ver->setAutoDetectionSource(autoDetectionSource);
|
||||||
ver->setIsAutodetected(isAutoDetected);
|
ver->setIsAutodetected(isAutoDetected);
|
||||||
|
@@ -54,7 +54,9 @@ public:
|
|||||||
/// a qtversion, the priority of the desktop factory is 0 and
|
/// a qtversion, the priority of the desktop factory is 0 and
|
||||||
/// the desktop factory claims to handle all paths
|
/// the desktop factory claims to handle all paths
|
||||||
int priority() const { return m_priority; }
|
int priority() const { return m_priority; }
|
||||||
virtual BaseQtVersion *create(ProFileEvaluator *evaluator) = 0;
|
|
||||||
|
BaseQtVersion *create() const;
|
||||||
|
virtual bool canCreate(ProFileEvaluator *evaluator) const;
|
||||||
|
|
||||||
static BaseQtVersion *createQtVersionFromQMakePath(
|
static BaseQtVersion *createQtVersionFromQMakePath(
|
||||||
const Utils::FileName &qmakePath, bool isAutoDetected = false,
|
const Utils::FileName &qmakePath, bool isAutoDetected = false,
|
||||||
|
@@ -40,21 +40,17 @@ EmbeddedLinuxQtVersionFactory::EmbeddedLinuxQtVersionFactory()
|
|||||||
setPriority(10);
|
setPriority(10);
|
||||||
}
|
}
|
||||||
|
|
||||||
QtSupport::BaseQtVersion *EmbeddedLinuxQtVersionFactory::create(ProFileEvaluator *evaluator)
|
bool EmbeddedLinuxQtVersionFactory::canCreate(ProFileEvaluator *evaluator) const
|
||||||
{
|
{
|
||||||
Q_UNUSED(evaluator);
|
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.
|
// 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
|
&& abis.at(0).os() == ProjectExplorer::Abi::LinuxOS
|
||||||
&& !ProjectExplorer::Abi::hostAbi().isCompatibleWith(abis.at(0)))
|
&& !ProjectExplorer::Abi::hostAbi().isCompatibleWith(abis.at(0));
|
||||||
return version;
|
|
||||||
|
|
||||||
delete version;
|
|
||||||
return nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
|
@@ -35,7 +35,7 @@ class EmbeddedLinuxQtVersionFactory : public QtSupport::QtVersionFactory
|
|||||||
public:
|
public:
|
||||||
EmbeddedLinuxQtVersionFactory();
|
EmbeddedLinuxQtVersionFactory();
|
||||||
|
|
||||||
QtSupport::BaseQtVersion *create(ProFileEvaluator *evaluator) override;
|
bool canCreate(ProFileEvaluator *evaluator) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // Internal
|
} // Internal
|
||||||
|
@@ -40,14 +40,9 @@ WinRtQtVersionFactory::WinRtQtVersionFactory()
|
|||||||
setPriority(10);
|
setPriority(10);
|
||||||
}
|
}
|
||||||
|
|
||||||
QtSupport::BaseQtVersion *WinRtQtVersionFactory::create(ProFileEvaluator *evaluator)
|
bool WinRtQtVersionFactory::canCreate(ProFileEvaluator *evaluator) const
|
||||||
{
|
{
|
||||||
foreach (const QString &value, evaluator->values(QLatin1String("QMAKE_PLATFORM"))) {
|
return evaluator->values("QMAKE_PLATFORM").contains("winrt");
|
||||||
if (value == QStringLiteral("winrt"))
|
|
||||||
return new WinRtQtVersion;
|
|
||||||
}
|
|
||||||
|
|
||||||
return nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -59,14 +54,9 @@ WinRtPhoneQtVersionFactory::WinRtPhoneQtVersionFactory()
|
|||||||
setPriority(10);
|
setPriority(10);
|
||||||
}
|
}
|
||||||
|
|
||||||
QtSupport::BaseQtVersion *WinRtPhoneQtVersionFactory::create(ProFileEvaluator *evaluator)
|
bool WinRtPhoneQtVersionFactory::canCreate(ProFileEvaluator *evaluator) const
|
||||||
{
|
{
|
||||||
foreach (const QString &value, evaluator->values(QLatin1String("QMAKE_PLATFORM"))) {
|
return evaluator->values("QMAKE_PLATFORM").contains("winphone");
|
||||||
if (value == QStringLiteral("winphone"))
|
|
||||||
return new WinRtPhoneQtVersion;
|
|
||||||
}
|
|
||||||
|
|
||||||
return nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // Internal
|
} // Internal
|
||||||
|
@@ -35,7 +35,7 @@ class WinRtQtVersionFactory : public QtSupport::QtVersionFactory
|
|||||||
public:
|
public:
|
||||||
WinRtQtVersionFactory();
|
WinRtQtVersionFactory();
|
||||||
|
|
||||||
QtSupport::BaseQtVersion *create(ProFileEvaluator *evaluator) override;
|
bool canCreate(ProFileEvaluator *evaluator) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
class WinRtPhoneQtVersionFactory : public QtSupport::QtVersionFactory
|
class WinRtPhoneQtVersionFactory : public QtSupport::QtVersionFactory
|
||||||
@@ -43,7 +43,7 @@ class WinRtPhoneQtVersionFactory : public QtSupport::QtVersionFactory
|
|||||||
public:
|
public:
|
||||||
WinRtPhoneQtVersionFactory();
|
WinRtPhoneQtVersionFactory();
|
||||||
|
|
||||||
QtSupport::BaseQtVersion *create(ProFileEvaluator *evaluator) override;
|
bool canCreate(ProFileEvaluator *evaluator) const override;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // Internal
|
} // Internal
|
||||||
|
Reference in New Issue
Block a user