From b45c709dffee3665e4e69863883e73cbf92a3478 Mon Sep 17 00:00:00 2001 From: hjk Date: Tue, 28 Feb 2017 11:22:58 +0100 Subject: [PATCH] QMake: Centralize determination of available creationIds No need for each target to do essentially the same. Change-Id: I76b6a0f2d064d7721f4ebe676f6efe12d3b5f87c Reviewed-by: BogDan Vatra Reviewed-by: Vikas Pachdha --- src/plugins/ios/iosrunfactories.cpp | 7 ++----- .../qmakeandroidrunfactories.cpp | 7 +------ .../desktopqmakerunconfiguration.cpp | 8 +------- .../qmakeprojectmanager/qmakeproject.cpp | 17 +++++++++++------ src/plugins/qmakeprojectmanager/qmakeproject.h | 5 +++-- src/plugins/qnx/qnxrunconfigurationfactory.cpp | 8 ++------ src/plugins/winrt/winrtrunfactories.cpp | 4 +--- 7 files changed, 21 insertions(+), 35 deletions(-) diff --git a/src/plugins/ios/iosrunfactories.cpp b/src/plugins/ios/iosrunfactories.cpp index 8b0485899a0..bdf8c9f818e 100644 --- a/src/plugins/ios/iosrunfactories.cpp +++ b/src/plugins/ios/iosrunfactories.cpp @@ -97,15 +97,12 @@ QList IosRunConfigurationFactory::availableCreationIds(Target *parent, { if (!IosManager::supportsIos(parent)) return QList(); - QmakeProject *project = static_cast(parent->project()); + QmakeProject *project = static_cast(parent->project()); QList files = project->allProFiles({ProjectType::ApplicationTemplate, ProjectType::SharedLibraryTemplate, ProjectType::AuxTemplate}); - if (mode == AutoCreate) - files = QmakeProject::proFilesWithQtcRunnable(files); - Core::Id baseId(IOS_RC_ID_PREFIX); - return QmakeProject::idsForProFiles(baseId, files); + return QmakeProject::creationIds(IOS_RC_ID_PREFIX, files, mode); } QString IosRunConfigurationFactory::displayNameForId(Core::Id id) const diff --git a/src/plugins/qmakeandroidsupport/qmakeandroidrunfactories.cpp b/src/plugins/qmakeandroidsupport/qmakeandroidrunfactories.cpp index bcf7c39fb19..f92e3476575 100644 --- a/src/plugins/qmakeandroidsupport/qmakeandroidrunfactories.cpp +++ b/src/plugins/qmakeandroidsupport/qmakeandroidrunfactories.cpp @@ -86,12 +86,7 @@ QList QmakeAndroidRunConfigurationFactory::availableCreationIds(Target QmakeProject *project = static_cast(parent->project()); QList files = project->allProFiles({ProjectType::ApplicationTemplate, ProjectType::SharedLibraryTemplate}); - - if (mode == AutoCreate) - files = QmakeProject::proFilesWithQtcRunnable(files); - - const Core::Id base = Core::Id(ANDROID_RC_ID_PREFIX); - return QmakeProject::idsForProFiles(base, files); + return QmakeProject::creationIds(ANDROID_RC_ID_PREFIX, files, mode); } RunConfiguration *QmakeAndroidRunConfigurationFactory::doCreate(Target *parent, Core::Id id) diff --git a/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp b/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp index c6dbb8fda24..eb5c5d21c5b 100644 --- a/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp +++ b/src/plugins/qmakeprojectmanager/desktopqmakerunconfiguration.cpp @@ -564,13 +564,7 @@ QList DesktopQmakeRunConfigurationFactory::availableCreationIds(Target return QList(); QmakeProject *project = static_cast(parent->project()); - QList files = project->applicationProFiles(); - if (mode == AutoCreate) { - QList markedFiles = QmakeProject::proFilesWithQtcRunnable(files); - if (!markedFiles.isEmpty()) - files = markedFiles; - } - return QmakeProject::idsForProFiles(Core::Id(QMAKE_RC_PREFIX), files); + return QmakeProject::creationIds(QMAKE_RC_PREFIX, project->applicationProFiles(), mode); } QString DesktopQmakeRunConfigurationFactory::displayNameForId(Core::Id id) const diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.cpp b/src/plugins/qmakeprojectmanager/qmakeproject.cpp index 9a3aebdc5b9..f54fd083e2d 100644 --- a/src/plugins/qmakeprojectmanager/qmakeproject.cpp +++ b/src/plugins/qmakeprojectmanager/qmakeproject.cpp @@ -902,14 +902,19 @@ bool QmakeProject::hasApplicationProFile(const FileName &path) const return Utils::contains(list, Utils::equal(&QmakeProFile::filePath, path)); } -QList QmakeProject::proFilesWithQtcRunnable(QList files) +QList QmakeProject::creationIds(Core::Id base, const QList &files, + IRunConfigurationFactory::CreationMode mode) { - return Utils::filtered(files, [](const QmakeProFile *f) { return f->isQtcRunnable(); }); -} + QList temp = files; -QList QmakeProject::idsForProFiles(Core::Id base, const QList &files) -{ - return Utils::transform(files, [&base](QmakeProFile *f) { + if (mode == IRunConfigurationFactory::AutoCreate) { + QList filtered = Utils::filtered(files, [](const QmakeProFile *f) { + return f->isQtcRunnable(); + }); + temp = filtered.isEmpty() ? files : filtered; + } + + return Utils::transform(temp, [&base](QmakeProFile *f) { return base.withSuffix(f->filePath().toString()); }); } diff --git a/src/plugins/qmakeprojectmanager/qmakeproject.h b/src/plugins/qmakeprojectmanager/qmakeproject.h index 37cac813093..f63a85af8dd 100644 --- a/src/plugins/qmakeprojectmanager/qmakeproject.h +++ b/src/plugins/qmakeprojectmanager/qmakeproject.h @@ -31,6 +31,7 @@ #include "qmakeparsernodes.h" #include +#include #include #include @@ -84,8 +85,8 @@ public: QList applicationProFiles(Parsing parse = ExactParse) const; bool hasApplicationProFile(const Utils::FileName &path) const; - static QList proFilesWithQtcRunnable(QList nodes); - static QList idsForProFiles(Core::Id base, const QList &files); + static QList creationIds(Core::Id base, const QList &files, + ProjectExplorer::IRunConfigurationFactory::CreationMode mode); void notifyChanged(const Utils::FileName &name); diff --git a/src/plugins/qnx/qnxrunconfigurationfactory.cpp b/src/plugins/qnx/qnxrunconfigurationfactory.cpp index 5d82aeabcac..bbb3b08ba64 100644 --- a/src/plugins/qnx/qnxrunconfigurationfactory.cpp +++ b/src/plugins/qnx/qnxrunconfigurationfactory.cpp @@ -56,13 +56,9 @@ QList QnxRunConfigurationFactory::availableCreationIds(ProjectExplorer auto project = qobject_cast(parent->project()); if (!project) return QList(); + QList files = project->applicationProFiles(); - - if (mode == AutoCreate) - files = QmakeProject::proFilesWithQtcRunnable(files); - - return QmakeProject::idsForProFiles(Core::Id(Constants::QNX_QNX_RUNCONFIGURATION_PREFIX), - files); + return QmakeProject::creationIds(Constants::QNX_QNX_RUNCONFIGURATION_PREFIX, files, mode); } QString QnxRunConfigurationFactory::displayNameForId(Core::Id id) const diff --git a/src/plugins/winrt/winrtrunfactories.cpp b/src/plugins/winrt/winrtrunfactories.cpp index d510517e0dc..703a30c47f2 100644 --- a/src/plugins/winrt/winrtrunfactories.cpp +++ b/src/plugins/winrt/winrtrunfactories.cpp @@ -67,9 +67,7 @@ QList WinRtRunConfigurationFactory::availableCreationIds(Target *paren QmakeProject *project = static_cast(parent->project()); QList files = project->applicationProFiles(); - if (mode == AutoCreate) - files = QmakeProject::proFilesWithQtcRunnable(files); - return QmakeProject::idsForProFiles(Core::Id(Constants::WINRT_RC_PREFIX), files); + return QmakeProject::creationIds(Constants::WINRT_RC_PREFIX, files, mode); } QString WinRtRunConfigurationFactory::displayNameForId(Core::Id id) const