QMake: Centralize determination of available creationIds

No need for each target to do essentially the same.

Change-Id: I76b6a0f2d064d7721f4ebe676f6efe12d3b5f87c
Reviewed-by: BogDan Vatra <bogdan@kdab.com>
Reviewed-by: Vikas Pachdha <vikas.pachdha@qt.io>
This commit is contained in:
hjk
2017-02-28 11:22:58 +01:00
parent ffbdfb883a
commit b45c709dff
7 changed files with 21 additions and 35 deletions

View File

@@ -97,15 +97,12 @@ QList<Core::Id> IosRunConfigurationFactory::availableCreationIds(Target *parent,
{
if (!IosManager::supportsIos(parent))
return QList<Core::Id>();
QmakeProject *project = static_cast<QmakeProject *>(parent->project());
QmakeProject *project = static_cast<QmakeProject *>(parent->project());
QList<QmakeProFile *> 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

View File

@@ -86,12 +86,7 @@ QList<Core::Id> QmakeAndroidRunConfigurationFactory::availableCreationIds(Target
QmakeProject *project = static_cast<QmakeProject *>(parent->project());
QList<QmakeProFile *> 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)

View File

@@ -564,13 +564,7 @@ QList<Core::Id> DesktopQmakeRunConfigurationFactory::availableCreationIds(Target
return QList<Core::Id>();
QmakeProject *project = static_cast<QmakeProject *>(parent->project());
QList<QmakeProFile *> files = project->applicationProFiles();
if (mode == AutoCreate) {
QList<QmakeProFile *> 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

View File

@@ -902,14 +902,19 @@ bool QmakeProject::hasApplicationProFile(const FileName &path) const
return Utils::contains(list, Utils::equal(&QmakeProFile::filePath, path));
}
QList<QmakeProFile *> QmakeProject::proFilesWithQtcRunnable(QList<QmakeProFile *> files)
QList<Core::Id> QmakeProject::creationIds(Core::Id base, const QList<QmakeProFile *> &files,
IRunConfigurationFactory::CreationMode mode)
{
return Utils::filtered(files, [](const QmakeProFile *f) { return f->isQtcRunnable(); });
}
QList<QmakeProFile *> temp = files;
QList<Core::Id> QmakeProject::idsForProFiles(Core::Id base, const QList<QmakeProFile *> &files)
{
return Utils::transform(files, [&base](QmakeProFile *f) {
if (mode == IRunConfigurationFactory::AutoCreate) {
QList<QmakeProFile *> 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());
});
}

View File

@@ -31,6 +31,7 @@
#include "qmakeparsernodes.h"
#include <projectexplorer/project.h>
#include <projectexplorer/runconfiguration.h>
#include <QStringList>
#include <QFutureInterface>
@@ -84,8 +85,8 @@ public:
QList<QmakeProFile *> applicationProFiles(Parsing parse = ExactParse) const;
bool hasApplicationProFile(const Utils::FileName &path) const;
static QList<QmakeProFile *> proFilesWithQtcRunnable(QList<QmakeProFile *> nodes);
static QList<Core::Id> idsForProFiles(Core::Id base, const QList<QmakeProFile *> &files);
static QList<Core::Id> creationIds(Core::Id base, const QList<QmakeProFile *> &files,
ProjectExplorer::IRunConfigurationFactory::CreationMode mode);
void notifyChanged(const Utils::FileName &name);

View File

@@ -56,13 +56,9 @@ QList<Core::Id> QnxRunConfigurationFactory::availableCreationIds(ProjectExplorer
auto project = qobject_cast<QmakeProject *>(parent->project());
if (!project)
return QList<Core::Id>();
QList<QmakeProjectManager::QmakeProFile *> 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

View File

@@ -67,9 +67,7 @@ QList<Core::Id> WinRtRunConfigurationFactory::availableCreationIds(Target *paren
QmakeProject *project = static_cast<QmakeProject *>(parent->project());
QList<QmakeProFile *> 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