ProjectExplorer: Using function objects for kit matching

Change-Id: I377298385df345a6d30217bb018964a64897d42e
Reviewed-by: Daniel Teske <daniel.teske@digia.com>
Reviewed-by: Tobias Hunger <tobias.hunger@digia.com>
This commit is contained in:
hjk
2014-07-23 09:09:20 +02:00
parent bf5e43be94
commit 71c6d4d771
17 changed files with 173 additions and 278 deletions

View File

@@ -55,53 +55,6 @@ using namespace ProjectExplorer;
namespace QmlProjectManager {
namespace Internal {
class QmlProjectKitMatcher : public ProjectExplorer::KitMatcher
{
public:
QmlProjectKitMatcher(const QmlProject::QmlImport &import)
: import(import)
{
}
bool matches(const ProjectExplorer::Kit *k) const
{
if (!k->isValid())
return false;
ProjectExplorer::IDevice::ConstPtr dev = ProjectExplorer::DeviceKitInformation::device(k);
if (dev.isNull() || dev->type() != ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE)
return false;
QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(k);
if (!version || version->type() != QLatin1String(QtSupport::Constants::DESKTOPQT))
return false;
bool hasViewer = false; // Initialization needed for dumb compilers.
QtSupport::QtVersionNumber minVersion;
switch (import) {
case QmlProject::UnknownImport:
minVersion = QtSupport::QtVersionNumber(4, 7, 0);
hasViewer = !version->qmlviewerCommand().isEmpty() || !version->qmlsceneCommand().isEmpty();
break;
case QmlProject::QtQuick1Import:
minVersion = QtSupport::QtVersionNumber(4, 7, 1);
hasViewer = !version->qmlviewerCommand().isEmpty();
break;
case QmlProject::QtQuick2Import:
minVersion = QtSupport::QtVersionNumber(5, 0, 0);
hasViewer = !version->qmlsceneCommand().isEmpty();
break;
}
if (version->qtVersion() >= minVersion
&& hasViewer)
return true;
return false;
}
private:
QmlProject::QmlImport import;
};
} // namespace Internal
QmlProject::QmlProject(Internal::Manager *manager, const QString &fileName)
@@ -394,8 +347,37 @@ bool QmlProject::fromMap(const QVariantMap &map)
if (!activeTarget()) {
// find a kit that matches prerequisites (prefer default one)
Internal::QmlProjectKitMatcher matcher(defaultImport());
QList<Kit*> kits = KitManager::matchingKits(matcher);
QList<Kit*> kits = KitManager::matchingKits(
std::function<bool(const Kit *)>([this](const Kit *k) -> bool {
if (!k->isValid())
return false;
IDevice::ConstPtr dev = DeviceKitInformation::device(k);
if (dev.isNull() || dev->type() != ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE)
return false;
QtSupport::BaseQtVersion *version = QtSupport::QtKitInformation::qtVersion(k);
if (!version || version->type() != QLatin1String(QtSupport::Constants::DESKTOPQT))
return false;
bool hasViewer = false; // Initialization needed for dumb compilers.
QtSupport::QtVersionNumber minVersion;
switch (m_defaultImport) {
case QmlProject::UnknownImport:
minVersion = QtSupport::QtVersionNumber(4, 7, 0);
hasViewer = !version->qmlviewerCommand().isEmpty() || !version->qmlsceneCommand().isEmpty();
break;
case QmlProject::QtQuick1Import:
minVersion = QtSupport::QtVersionNumber(4, 7, 1);
hasViewer = !version->qmlviewerCommand().isEmpty();
break;
case QmlProject::QtQuick2Import:
minVersion = QtSupport::QtVersionNumber(5, 0, 0);
hasViewer = !version->qmlsceneCommand().isEmpty();
break;
}
return version->qtVersion() >= minVersion && hasViewer;
}));
if (!kits.isEmpty()) {
Kit *kit = 0;