forked from qt-creator/qt-creator
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:
@@ -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
|
||||
|
@@ -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)
|
||||
|
@@ -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
|
||||
|
@@ -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());
|
||||
});
|
||||
}
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user