forked from qt-creator/qt-creator
ProjectExplorer: De-duplicate code in IBuildStepFactory derived classes
This removes 900 lines of duplicated code, some duplicated checks at runtime and some (minor) quadratic behavior when gathering display names. canClone(), canRestore() and canCreate() and restore() use the same pattern. Handle that on the core side once. Leave retore() virtual to let the ios code unmodified (which is likely not needed, later...). Introduce 'Unclonable' and 'Uncreatable' flags to keep Android package installation and WinRT deployment (non-)functionality unchanged. Change-Id: I0325479aff818a4038b2f241ca733b8d8cd66f2f Reviewed-by: Tobias Hunger <tobias.hunger@qt.io>
This commit is contained in:
@@ -697,64 +697,23 @@ QbsBuildStepFactory::QbsBuildStepFactory(QObject *parent) :
|
||||
ProjectExplorer::IBuildStepFactory(parent)
|
||||
{ }
|
||||
|
||||
QList<Core::Id> QbsBuildStepFactory::availableCreationIds(ProjectExplorer::BuildStepList *parent) const
|
||||
void QbsBuildStepFactory::availableSteps(QList<ProjectExplorer::BuildStepInfo> *steps,
|
||||
ProjectExplorer::BuildStepList *parent) const
|
||||
{
|
||||
if (parent->id() == ProjectExplorer::Constants::BUILDSTEPS_BUILD
|
||||
&& qobject_cast<QbsBuildConfiguration *>(parent->parent())
|
||||
&& qobject_cast<QbsProject *>(parent->target()->project()))
|
||||
return QList<Core::Id>() << Core::Id(Constants::QBS_BUILDSTEP_ID);
|
||||
return QList<Core::Id>();
|
||||
}
|
||||
|
||||
QString QbsBuildStepFactory::displayNameForId(Core::Id id) const
|
||||
{
|
||||
if (id == Core::Id(Constants::QBS_BUILDSTEP_ID))
|
||||
return tr("Qbs Build");
|
||||
return QString();
|
||||
}
|
||||
|
||||
bool QbsBuildStepFactory::canCreate(ProjectExplorer::BuildStepList *parent, Core::Id id) const
|
||||
{
|
||||
if (parent->id() != Core::Id(ProjectExplorer::Constants::BUILDSTEPS_BUILD)
|
||||
|| !qobject_cast<QbsBuildConfiguration *>(parent->parent())
|
||||
|| !qobject_cast<QbsProject *>(parent->target()->project()))
|
||||
return false;
|
||||
return id == Core::Id(Constants::QBS_BUILDSTEP_ID);
|
||||
steps->append({ Constants::QBS_BUILDSTEP_ID, tr("Qbs Build") });
|
||||
}
|
||||
|
||||
ProjectExplorer::BuildStep *QbsBuildStepFactory::create(ProjectExplorer::BuildStepList *parent, Core::Id id)
|
||||
{
|
||||
if (!canCreate(parent, id))
|
||||
return 0;
|
||||
Q_UNUSED(id);
|
||||
return new QbsBuildStep(parent);
|
||||
}
|
||||
|
||||
bool QbsBuildStepFactory::canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const
|
||||
{
|
||||
return canCreate(parent, ProjectExplorer::idFromMap(map));
|
||||
}
|
||||
|
||||
ProjectExplorer::BuildStep *QbsBuildStepFactory::restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map)
|
||||
{
|
||||
if (!canRestore(parent, map))
|
||||
return 0;
|
||||
QbsBuildStep *bs = new QbsBuildStep(parent);
|
||||
if (!bs->fromMap(map)) {
|
||||
delete bs;
|
||||
return 0;
|
||||
}
|
||||
return bs;
|
||||
}
|
||||
|
||||
bool QbsBuildStepFactory::canClone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) const
|
||||
{
|
||||
return canCreate(parent, product->id());
|
||||
}
|
||||
|
||||
ProjectExplorer::BuildStep *QbsBuildStepFactory::clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product)
|
||||
{
|
||||
if (!canClone(parent, product))
|
||||
return 0;
|
||||
return new QbsBuildStep(parent, static_cast<QbsBuildStep *>(product));
|
||||
}
|
||||
|
||||
|
||||
@@ -167,17 +167,10 @@ class QbsBuildStepFactory : public ProjectExplorer::IBuildStepFactory
|
||||
public:
|
||||
explicit QbsBuildStepFactory(QObject *parent = 0);
|
||||
|
||||
// used to show the list of possible additons to a target, returns a list of types
|
||||
QList<Core::Id> availableCreationIds(ProjectExplorer::BuildStepList *parent) const override;
|
||||
// used to translate the types to names to display to the user
|
||||
QString displayNameForId(Core::Id id) const override;
|
||||
QList<ProjectExplorer::BuildStepInfo>
|
||||
availableSteps(ProjectExplorer::BuildStepList *parent) const override;
|
||||
|
||||
bool canCreate(ProjectExplorer::BuildStepList *parent, Core::Id id) const override;
|
||||
ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override;
|
||||
// used to recreate the runConfigurations when restoring settings
|
||||
bool canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const override;
|
||||
ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) override;
|
||||
bool canClone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) const override;
|
||||
ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) override;
|
||||
};
|
||||
|
||||
|
||||
@@ -300,62 +300,22 @@ QbsCleanStepFactory::QbsCleanStepFactory(QObject *parent) :
|
||||
ProjectExplorer::IBuildStepFactory(parent)
|
||||
{ }
|
||||
|
||||
QList<Core::Id> QbsCleanStepFactory::availableCreationIds(ProjectExplorer::BuildStepList *parent) const
|
||||
void QbsCleanStepFactory::availableSteps(QList<ProjectExplorer::BuildStepInfo> *steps,
|
||||
ProjectExplorer::BuildStepList *parent) const
|
||||
{
|
||||
if (parent->id() == ProjectExplorer::Constants::BUILDSTEPS_CLEAN
|
||||
&& qobject_cast<QbsBuildConfiguration *>(parent->parent()))
|
||||
return QList<Core::Id>() << Core::Id(Constants::QBS_CLEANSTEP_ID);
|
||||
return QList<Core::Id>();
|
||||
}
|
||||
|
||||
QString QbsCleanStepFactory::displayNameForId(Core::Id id) const
|
||||
{
|
||||
if (id == Core::Id(Constants::QBS_CLEANSTEP_ID))
|
||||
return tr("Qbs Clean");
|
||||
return QString();
|
||||
}
|
||||
|
||||
bool QbsCleanStepFactory::canCreate(ProjectExplorer::BuildStepList *parent, Core::Id id) const
|
||||
{
|
||||
if (parent->id() != Core::Id(ProjectExplorer::Constants::BUILDSTEPS_CLEAN)
|
||||
|| !qobject_cast<QbsBuildConfiguration *>(parent->parent()))
|
||||
return false;
|
||||
return id == Core::Id(Constants::QBS_CLEANSTEP_ID);
|
||||
steps->append({ Constants::QBS_CLEANSTEP_ID, tr("Qbs Clean") });
|
||||
}
|
||||
|
||||
ProjectExplorer::BuildStep *QbsCleanStepFactory::create(ProjectExplorer::BuildStepList *parent, Core::Id id)
|
||||
{
|
||||
if (!canCreate(parent, id))
|
||||
return 0;
|
||||
Q_UNUSED(id);
|
||||
return new QbsCleanStep(parent);
|
||||
}
|
||||
|
||||
bool QbsCleanStepFactory::canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const
|
||||
{
|
||||
return canCreate(parent, ProjectExplorer::idFromMap(map));
|
||||
}
|
||||
|
||||
ProjectExplorer::BuildStep *QbsCleanStepFactory::restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map)
|
||||
{
|
||||
if (!canRestore(parent, map))
|
||||
return 0;
|
||||
QbsCleanStep *bs = new QbsCleanStep(parent);
|
||||
if (!bs->fromMap(map)) {
|
||||
delete bs;
|
||||
return 0;
|
||||
}
|
||||
return bs;
|
||||
}
|
||||
|
||||
bool QbsCleanStepFactory::canClone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) const
|
||||
{
|
||||
return canCreate(parent, product->id());
|
||||
}
|
||||
|
||||
ProjectExplorer::BuildStep *QbsCleanStepFactory::clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product)
|
||||
{
|
||||
if (!canClone(parent, product))
|
||||
return 0;
|
||||
return new QbsCleanStep(parent, static_cast<QbsCleanStep *>(product));
|
||||
}
|
||||
|
||||
|
||||
@@ -121,17 +121,10 @@ class QbsCleanStepFactory : public ProjectExplorer::IBuildStepFactory
|
||||
public:
|
||||
explicit QbsCleanStepFactory(QObject *parent = 0);
|
||||
|
||||
// used to show the list of possible additons to a target, returns a list of types
|
||||
QList<Core::Id> availableCreationIds(ProjectExplorer::BuildStepList *parent) const override;
|
||||
// used to translate the types to names to display to the user
|
||||
QString displayNameForId(Core::Id id) const override;
|
||||
QList<ProjectExplorer::BuildStepInfo>
|
||||
availableSteps(ProjectExplorer::BuildStepList *parent) const override;
|
||||
|
||||
bool canCreate(ProjectExplorer::BuildStepList *parent, Core::Id id) const override;
|
||||
ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override;
|
||||
// used to recreate the runConfigurations when restoring settings
|
||||
bool canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const override;
|
||||
ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) override;
|
||||
bool canClone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) const override;
|
||||
ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) override;
|
||||
};
|
||||
|
||||
|
||||
@@ -356,68 +356,25 @@ QbsInstallStepFactory::QbsInstallStepFactory(QObject *parent) :
|
||||
ProjectExplorer::IBuildStepFactory(parent)
|
||||
{ }
|
||||
|
||||
QList<Core::Id> QbsInstallStepFactory::availableCreationIds(ProjectExplorer::BuildStepList *parent) const
|
||||
void QbsInstallStepFactory::availableSteps(QList<ProjectExplorer::BuildStepInfo> *steps,
|
||||
ProjectExplorer::BuildStepList *parent) const
|
||||
{
|
||||
if (parent->id() == ProjectExplorer::Constants::BUILDSTEPS_DEPLOY
|
||||
&& qobject_cast<ProjectExplorer::DeployConfiguration *>(parent->parent())
|
||||
&& qobject_cast<QbsProject *>(parent->target()->project()))
|
||||
return QList<Core::Id>() << Core::Id(Constants::QBS_INSTALLSTEP_ID);
|
||||
return QList<Core::Id>();
|
||||
}
|
||||
|
||||
QString QbsInstallStepFactory::displayNameForId(Core::Id id) const
|
||||
{
|
||||
if (id == Core::Id(Constants::QBS_INSTALLSTEP_ID))
|
||||
return tr("Qbs Install");
|
||||
return QString();
|
||||
}
|
||||
|
||||
bool QbsInstallStepFactory::canCreate(ProjectExplorer::BuildStepList *parent, Core::Id id) const
|
||||
{
|
||||
if (parent->id() != Core::Id(ProjectExplorer::Constants::BUILDSTEPS_DEPLOY)
|
||||
|| !qobject_cast<ProjectExplorer::DeployConfiguration *>(parent->parent())
|
||||
|| !qobject_cast<QbsProject *>(parent->target()->project()))
|
||||
return false;
|
||||
return id == Core::Id(Constants::QBS_INSTALLSTEP_ID);
|
||||
steps->append({ Constants::QBS_INSTALLSTEP_ID, tr("Qbs Install") });
|
||||
}
|
||||
|
||||
ProjectExplorer::BuildStep *QbsInstallStepFactory::create(ProjectExplorer::BuildStepList *parent,
|
||||
const Core::Id id)
|
||||
{
|
||||
if (!canCreate(parent, id))
|
||||
return 0;
|
||||
Q_UNUSED(id);
|
||||
return new QbsInstallStep(parent);
|
||||
}
|
||||
|
||||
bool QbsInstallStepFactory::canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const
|
||||
{
|
||||
return canCreate(parent, ProjectExplorer::idFromMap(map));
|
||||
}
|
||||
|
||||
ProjectExplorer::BuildStep *QbsInstallStepFactory::restore(ProjectExplorer::BuildStepList *parent,
|
||||
const QVariantMap &map)
|
||||
{
|
||||
if (!canRestore(parent, map))
|
||||
return 0;
|
||||
QbsInstallStep *bs = new QbsInstallStep(parent);
|
||||
if (!bs->fromMap(map)) {
|
||||
delete bs;
|
||||
return 0;
|
||||
}
|
||||
return bs;
|
||||
}
|
||||
|
||||
bool QbsInstallStepFactory::canClone(ProjectExplorer::BuildStepList *parent,
|
||||
ProjectExplorer::BuildStep *product) const
|
||||
{
|
||||
return canCreate(parent, product->id());
|
||||
}
|
||||
|
||||
ProjectExplorer::BuildStep *QbsInstallStepFactory::clone(ProjectExplorer::BuildStepList *parent,
|
||||
ProjectExplorer::BuildStep *product)
|
||||
{
|
||||
if (!canClone(parent, product))
|
||||
return 0;
|
||||
return new QbsInstallStep(parent, static_cast<QbsInstallStep *>(product));
|
||||
}
|
||||
|
||||
|
||||
@@ -127,17 +127,10 @@ class QbsInstallStepFactory : public ProjectExplorer::IBuildStepFactory
|
||||
public:
|
||||
explicit QbsInstallStepFactory(QObject *parent = 0);
|
||||
|
||||
// used to show the list of possible additons to a target, returns a list of types
|
||||
QList<Core::Id> availableCreationIds(ProjectExplorer::BuildStepList *parent) const override;
|
||||
// used to translate the types to names to display to the user
|
||||
QString displayNameForId(Core::Id id) const override;
|
||||
QList<ProjectExplorer::BuildStepInfo>
|
||||
availableSteps(ProjectExplorer::BuildStepList *parent) const override;
|
||||
|
||||
bool canCreate(ProjectExplorer::BuildStepList *parent, Core::Id id) const override;
|
||||
ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override;
|
||||
// used to recreate the runConfigurations when restoring settings
|
||||
bool canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const override;
|
||||
ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) override;
|
||||
bool canClone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) const override;
|
||||
ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent, ProjectExplorer::BuildStep *product) override;
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user