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:
@@ -328,22 +328,9 @@ IosBuildStepFactory::IosBuildStepFactory(QObject *parent) :
|
||||
{
|
||||
}
|
||||
|
||||
bool IosBuildStepFactory::canCreate(BuildStepList *parent, const Id id) const
|
||||
{
|
||||
if (parent->id() != ProjectExplorer::Constants::BUILDSTEPS_CLEAN
|
||||
&& parent->id() != ProjectExplorer::Constants::BUILDSTEPS_BUILD)
|
||||
return false;
|
||||
Kit *kit = parent->target()->kit();
|
||||
Id deviceType = DeviceTypeKitInformation::deviceTypeId(kit);
|
||||
return ((deviceType == Constants::IOS_DEVICE_TYPE
|
||||
|| deviceType == Constants::IOS_SIMULATOR_TYPE)
|
||||
&& id == IOS_BUILD_STEP_ID);
|
||||
}
|
||||
|
||||
BuildStep *IosBuildStepFactory::create(BuildStepList *parent, const Id id)
|
||||
{
|
||||
if (!canCreate(parent, id))
|
||||
return 0;
|
||||
Q_UNUSED(id);
|
||||
IosBuildStep *step = new IosBuildStep(parent);
|
||||
if (parent->id() == ProjectExplorer::Constants::BUILDSTEPS_CLEAN) {
|
||||
step->setClean(true);
|
||||
@@ -354,52 +341,27 @@ BuildStep *IosBuildStepFactory::create(BuildStepList *parent, const Id id)
|
||||
return step;
|
||||
}
|
||||
|
||||
bool IosBuildStepFactory::canClone(BuildStepList *parent, BuildStep *source) const
|
||||
{
|
||||
return canCreate(parent, source->id());
|
||||
}
|
||||
|
||||
BuildStep *IosBuildStepFactory::clone(BuildStepList *parent, BuildStep *source)
|
||||
{
|
||||
if (!canClone(parent, source))
|
||||
return 0;
|
||||
IosBuildStep *old(qobject_cast<IosBuildStep *>(source));
|
||||
IosBuildStep *old = qobject_cast<IosBuildStep *>(source);
|
||||
Q_ASSERT(old);
|
||||
return new IosBuildStep(parent, old);
|
||||
}
|
||||
|
||||
bool IosBuildStepFactory::canRestore(BuildStepList *parent, const QVariantMap &map) const
|
||||
QList<BuildStepInfo> IosBuildStepFactory::availableSteps(BuildStepList *parent) const
|
||||
{
|
||||
return canCreate(parent, idFromMap(map));
|
||||
}
|
||||
Id deviceType = DeviceTypeKitInformation::deviceTypeId(parent->target()->kit());
|
||||
if (deviceType != Constants::IOS_DEVICE_TYPE
|
||||
&& deviceType != Constants::IOS_SIMULATOR_TYPE)
|
||||
return {};
|
||||
|
||||
BuildStep *IosBuildStepFactory::restore(BuildStepList *parent, const QVariantMap &map)
|
||||
{
|
||||
if (!canRestore(parent, map))
|
||||
return 0;
|
||||
IosBuildStep *bs(new IosBuildStep(parent));
|
||||
if (bs->fromMap(map))
|
||||
return bs;
|
||||
delete bs;
|
||||
return 0;
|
||||
}
|
||||
if (parent->id() != ProjectExplorer::Constants::BUILDSTEPS_CLEAN
|
||||
&& parent->id() != ProjectExplorer::Constants::BUILDSTEPS_BUILD)
|
||||
return {};
|
||||
|
||||
QList<Id> IosBuildStepFactory::availableCreationIds(BuildStepList *parent) const
|
||||
{
|
||||
Kit *kit = parent->target()->kit();
|
||||
Id deviceType = DeviceTypeKitInformation::deviceTypeId(kit);
|
||||
if (deviceType == Constants::IOS_DEVICE_TYPE
|
||||
|| deviceType == Constants::IOS_SIMULATOR_TYPE)
|
||||
return QList<Id>() << Id(IOS_BUILD_STEP_ID);
|
||||
return QList<Id>();
|
||||
}
|
||||
|
||||
QString IosBuildStepFactory::displayNameForId(const Id id) const
|
||||
{
|
||||
if (id == IOS_BUILD_STEP_ID)
|
||||
return QCoreApplication::translate("GenericProjectManager::Internal::IosBuildStep",
|
||||
IOS_BUILD_STEP_DISPLAY_NAME);
|
||||
return QString();
|
||||
return {{ IOS_BUILD_STEP_ID,
|
||||
QCoreApplication::translate("GenericProjectManager::Internal::IosBuildStep",
|
||||
IOS_BUILD_STEP_DISPLAY_NAME) }};
|
||||
}
|
||||
|
||||
} // namespace Internal
|
||||
|
||||
@@ -108,18 +108,12 @@ class IosBuildStepFactory : public ProjectExplorer::IBuildStepFactory
|
||||
public:
|
||||
explicit IosBuildStepFactory(QObject *parent = 0);
|
||||
|
||||
bool canCreate(ProjectExplorer::BuildStepList *parent, Core::Id id) const override;
|
||||
QList<ProjectExplorer::BuildStepInfo>
|
||||
availableSteps(ProjectExplorer::BuildStepList *parent) const override;
|
||||
|
||||
ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override;
|
||||
bool canClone(ProjectExplorer::BuildStepList *parent,
|
||||
ProjectExplorer::BuildStep *source) const override;
|
||||
ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent,
|
||||
ProjectExplorer::BuildStep *source) override;
|
||||
bool canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const override;
|
||||
ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildStepList *parent,
|
||||
const QVariantMap &map) override;
|
||||
|
||||
QList<Core::Id> availableCreationIds(ProjectExplorer::BuildStepList *bc) const override;
|
||||
QString displayNameForId(Core::Id id) const override;
|
||||
};
|
||||
|
||||
} // namespace Internal
|
||||
|
||||
@@ -46,60 +46,23 @@ IosDeployStepFactory::IosDeployStepFactory(QObject *parent)
|
||||
{
|
||||
}
|
||||
|
||||
QList<Core::Id> IosDeployStepFactory::availableCreationIds(BuildStepList *parent) const
|
||||
QList<BuildStepInfo> IosDeployStepFactory::availableSteps(BuildStepList *parent) const
|
||||
{
|
||||
if (parent->id() != ProjectExplorer::Constants::BUILDSTEPS_DEPLOY)
|
||||
return QList<Core::Id>();
|
||||
if (!IosManager::supportsIos(parent->target()))
|
||||
return QList<Core::Id>();
|
||||
if (parent->contains(IosDeployStep::Id))
|
||||
return QList<Core::Id>();
|
||||
return QList<Core::Id>() << IosDeployStep::Id;
|
||||
}
|
||||
|
||||
QString IosDeployStepFactory::displayNameForId(Core::Id id) const
|
||||
{
|
||||
if (id == IosDeployStep::Id)
|
||||
return tr("Deploy to iOS device or emulator");
|
||||
return QString();
|
||||
}
|
||||
|
||||
bool IosDeployStepFactory::canCreate(BuildStepList *parent, Core::Id id) const
|
||||
{
|
||||
return availableCreationIds(parent).contains(id);
|
||||
if (parent->id() == ProjectExplorer::Constants::BUILDSTEPS_DEPLOY
|
||||
&& IosManager::supportsIos(parent->target())
|
||||
&& !parent->contains(IosDeployStep::Id))
|
||||
return {{ IosDeployStep::Id, tr("Deploy to iOS device or emulator") }};
|
||||
return {};
|
||||
}
|
||||
|
||||
BuildStep *IosDeployStepFactory::create(BuildStepList *parent, Core::Id id)
|
||||
{
|
||||
Q_ASSERT(canCreate(parent, id));
|
||||
Q_UNUSED(id);
|
||||
return new IosDeployStep(parent);
|
||||
}
|
||||
|
||||
bool IosDeployStepFactory::canRestore(BuildStepList *parent, const QVariantMap &map) const
|
||||
{
|
||||
return canCreate(parent, idFromMap(map));
|
||||
}
|
||||
|
||||
BuildStep *IosDeployStepFactory::restore(BuildStepList *parent, const QVariantMap &map)
|
||||
{
|
||||
Q_ASSERT(canRestore(parent, map));
|
||||
IosDeployStep * const step = new IosDeployStep(parent);
|
||||
if (!step->fromMap(map)) {
|
||||
delete step;
|
||||
return 0;
|
||||
}
|
||||
return step;
|
||||
}
|
||||
|
||||
bool IosDeployStepFactory::canClone(BuildStepList *parent, BuildStep *product) const
|
||||
{
|
||||
return canCreate(parent, product->id());
|
||||
}
|
||||
|
||||
BuildStep *IosDeployStepFactory::clone(BuildStepList *parent, BuildStep *product)
|
||||
{
|
||||
Q_ASSERT(canClone(parent, product));
|
||||
return new IosDeployStep(parent, static_cast<IosDeployStep *>(product));
|
||||
}
|
||||
|
||||
|
||||
@@ -33,21 +33,14 @@ namespace Internal {
|
||||
class IosDeployStepFactory : public ProjectExplorer::IBuildStepFactory
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit IosDeployStepFactory(QObject *parent = 0);
|
||||
|
||||
QList<Core::Id> availableCreationIds(ProjectExplorer::BuildStepList *parent) const override;
|
||||
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;
|
||||
|
||||
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;
|
||||
};
|
||||
|
||||
@@ -331,8 +331,6 @@ IosPresetBuildStepFactory::IosPresetBuildStepFactory(QObject *parent) :
|
||||
|
||||
BuildStep *IosPresetBuildStepFactory::create(BuildStepList *parent, const Id id)
|
||||
{
|
||||
if (!canCreate(parent, id))
|
||||
return 0;
|
||||
IosPresetBuildStep *step = createPresetStep(parent, id);
|
||||
if (step->completeSetup())
|
||||
return step;
|
||||
@@ -340,15 +338,8 @@ BuildStep *IosPresetBuildStepFactory::create(BuildStepList *parent, const Id id)
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool IosPresetBuildStepFactory::canClone(BuildStepList *parent, BuildStep *source) const
|
||||
{
|
||||
return canCreate(parent, source->id());
|
||||
}
|
||||
|
||||
BuildStep *IosPresetBuildStepFactory::clone(BuildStepList *parent, BuildStep *source)
|
||||
{
|
||||
if (!canClone(parent, source))
|
||||
return 0;
|
||||
IosPresetBuildStep *old = qobject_cast<IosPresetBuildStep *>(source);
|
||||
Q_ASSERT(old);
|
||||
IosPresetBuildStep *res = createPresetStep(parent, old->id());
|
||||
@@ -358,15 +349,8 @@ BuildStep *IosPresetBuildStepFactory::clone(BuildStepList *parent, BuildStep *so
|
||||
return 0;
|
||||
}
|
||||
|
||||
bool IosPresetBuildStepFactory::canRestore(BuildStepList *parent, const QVariantMap &map) const
|
||||
{
|
||||
return canCreate(parent, idFromMap(map));
|
||||
}
|
||||
|
||||
BuildStep *IosPresetBuildStepFactory::restore(BuildStepList *parent, const QVariantMap &map)
|
||||
{
|
||||
if (!canRestore(parent, map))
|
||||
return 0;
|
||||
IosPresetBuildStep *bs = createPresetStep(parent, idFromMap(map));
|
||||
if (bs->fromMap(map))
|
||||
return bs;
|
||||
@@ -374,38 +358,18 @@ BuildStep *IosPresetBuildStepFactory::restore(BuildStepList *parent, const QVari
|
||||
return 0;
|
||||
}
|
||||
|
||||
QString IosDsymBuildStepFactory::displayNameForId(const Id id) const
|
||||
{
|
||||
if (id == Constants::IOS_DSYM_BUILD_STEP_ID)
|
||||
return QLatin1String("dsymutil");
|
||||
return QString();
|
||||
}
|
||||
|
||||
QList<Id> IosDsymBuildStepFactory::availableCreationIds(BuildStepList *parent) const
|
||||
QList<BuildStepInfo> IosDsymBuildStepFactory::availableSteps(BuildStepList *parent) const
|
||||
{
|
||||
if (parent->id() != ProjectExplorer::Constants::BUILDSTEPS_CLEAN
|
||||
&& parent->id() != ProjectExplorer::Constants::BUILDSTEPS_BUILD
|
||||
&& parent->id() != ProjectExplorer::Constants::BUILDSTEPS_DEPLOY)
|
||||
return QList<Id>();
|
||||
Kit *kit = parent->target()->kit();
|
||||
Id deviceType = DeviceTypeKitInformation::deviceTypeId(kit);
|
||||
if (deviceType == Constants::IOS_DEVICE_TYPE
|
||||
|| deviceType == Constants::IOS_SIMULATOR_TYPE)
|
||||
return QList<Id>() << Id(Constants::IOS_DSYM_BUILD_STEP_ID);
|
||||
return QList<Id>();
|
||||
}
|
||||
return {};
|
||||
|
||||
bool IosDsymBuildStepFactory::canCreate(BuildStepList *parent, const Id id) const
|
||||
{
|
||||
if (parent->id() != ProjectExplorer::Constants::BUILDSTEPS_CLEAN
|
||||
&& parent->id() != ProjectExplorer::Constants::BUILDSTEPS_BUILD
|
||||
&& parent->id() != ProjectExplorer::Constants::BUILDSTEPS_DEPLOY)
|
||||
return false;
|
||||
Kit *kit = parent->target()->kit();
|
||||
Id deviceType = DeviceTypeKitInformation::deviceTypeId(kit);
|
||||
return ((deviceType == Constants::IOS_DEVICE_TYPE
|
||||
|| deviceType == Constants::IOS_SIMULATOR_TYPE)
|
||||
&& id == Constants::IOS_DSYM_BUILD_STEP_ID);
|
||||
Id deviceType = DeviceTypeKitInformation::deviceTypeId(parent->target()->kit());
|
||||
if (deviceType != Constants::IOS_DEVICE_TYPE && deviceType != Constants::IOS_SIMULATOR_TYPE)
|
||||
return {};
|
||||
|
||||
return {{ Constants::IOS_DSYM_BUILD_STEP_ID, "dsymutil" }};
|
||||
}
|
||||
|
||||
IosPresetBuildStep *IosDsymBuildStepFactory::createPresetStep(BuildStepList *parent, const Id id) const
|
||||
|
||||
@@ -101,11 +101,8 @@ public:
|
||||
explicit IosPresetBuildStepFactory(QObject *parent = 0);
|
||||
|
||||
ProjectExplorer::BuildStep *create(ProjectExplorer::BuildStepList *parent, Core::Id id) override;
|
||||
bool canClone(ProjectExplorer::BuildStepList *parent,
|
||||
ProjectExplorer::BuildStep *source) const override;
|
||||
ProjectExplorer::BuildStep *clone(ProjectExplorer::BuildStepList *parent,
|
||||
ProjectExplorer::BuildStep *source) override;
|
||||
bool canRestore(ProjectExplorer::BuildStepList *parent, const QVariantMap &map) const override;
|
||||
ProjectExplorer::BuildStep *restore(ProjectExplorer::BuildStepList *parent,
|
||||
const QVariantMap &map) override;
|
||||
|
||||
@@ -128,9 +125,9 @@ class IosDsymBuildStepFactory : public IosPresetBuildStepFactory
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
bool canCreate(ProjectExplorer::BuildStepList *parent, Core::Id id) const override;
|
||||
QList<Core::Id> availableCreationIds(ProjectExplorer::BuildStepList *bc) const override;
|
||||
QString displayNameForId(Core::Id id) const override;
|
||||
QList<ProjectExplorer::BuildStepInfo>
|
||||
availableSteps(ProjectExplorer::BuildStepList *parent) const override;
|
||||
|
||||
IosPresetBuildStep *createPresetStep(ProjectExplorer::BuildStepList *parent,
|
||||
const Core::Id id) const override;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user