diff --git a/src/plugins/projectexplorer/buildstep.cpp b/src/plugins/projectexplorer/buildstep.cpp index 39a2e647fdc..cc8c0fdb57c 100644 --- a/src/plugins/projectexplorer/buildstep.cpp +++ b/src/plugins/projectexplorer/buildstep.cpp @@ -463,12 +463,9 @@ Utils::Id BuildStepFactory::stepId() const return m_info.id; } -BuildStep *BuildStepFactory::create(BuildStepList *parent, Utils::Id id) +BuildStep *BuildStepFactory::create(BuildStepList *parent) { - BuildStep *bs = nullptr; - if (id == m_info.id) - bs = m_info.creator(parent); - return bs; + return m_info.creator(parent); } BuildStep *BuildStepFactory::restore(BuildStepList *parent, const QVariantMap &map) diff --git a/src/plugins/projectexplorer/buildstep.h b/src/plugins/projectexplorer/buildstep.h index f736e2474ed..30698ca702c 100644 --- a/src/plugins/projectexplorer/buildstep.h +++ b/src/plugins/projectexplorer/buildstep.h @@ -186,7 +186,7 @@ public: BuildStepInfo stepInfo() const; Utils::Id stepId() const; - BuildStep *create(BuildStepList *parent, Utils::Id id); + BuildStep *create(BuildStepList *parent); BuildStep *restore(BuildStepList *parent, const QVariantMap &map); bool canHandle(BuildStepList *bsl) const; diff --git a/src/plugins/projectexplorer/buildsteplist.cpp b/src/plugins/projectexplorer/buildsteplist.cpp index 3fd22f8c4e7..759deeceadc 100644 --- a/src/plugins/projectexplorer/buildsteplist.cpp +++ b/src/plugins/projectexplorer/buildsteplist.cpp @@ -167,7 +167,9 @@ void BuildStepList::insertStep(int position, BuildStep *step) void BuildStepList::insertStep(int position, Utils::Id stepId) { for (BuildStepFactory *factory : BuildStepFactory::allBuildStepFactories()) { - if (BuildStep *step = factory->create(this, stepId)) { + if (factory->stepId() == stepId) { + BuildStep *step = factory->create(this); + QTC_ASSERT(step, break); insertStep(position, step); return; } diff --git a/src/plugins/projectexplorer/buildstepspage.cpp b/src/plugins/projectexplorer/buildstepspage.cpp index 5d44ba143ad..3fcdc9ea738 100644 --- a/src/plugins/projectexplorer/buildstepspage.cpp +++ b/src/plugins/projectexplorer/buildstepspage.cpp @@ -253,37 +253,26 @@ void BuildStepListWidget::updateEnabledState() void BuildStepListWidget::updateAddBuildStepMenu() { - QMap > map; - //Build up a list of possible steps and save map the display names to the (internal) name and factories. - for (BuildStepFactory *factory : BuildStepFactory::allBuildStepFactories()) { - if (factory->canHandle(m_buildStepList)) { - const BuildStepInfo &info = factory->stepInfo(); - if (info.flags & BuildStepInfo::Uncreatable) - continue; - if ((info.flags & BuildStepInfo::UniqueStep) && m_buildStepList->contains(info.id)) - continue; - map.insert(info.displayName, qMakePair(info.id, factory)); - } - } - - // Ask the user which one to add QMenu *menu = m_addButton->menu(); menu->clear(); - if (!map.isEmpty()) { - QMap >::const_iterator it, end; - end = map.constEnd(); - for (it = map.constBegin(); it != end; ++it) { - QAction *action = menu->addAction(it.key()); - BuildStepFactory *factory = it.value().second; - Utils::Id id = it.value().first; - connect(action, &QAction::triggered, [id, factory, this]() { - BuildStep *newStep = factory->create(m_buildStepList, id); - QTC_ASSERT(newStep, return); - int pos = m_buildStepList->count(); - m_buildStepList->insertStep(pos, newStep); - }); - } + for (BuildStepFactory *factory : BuildStepFactory::allBuildStepFactories()) { + if (!factory->canHandle(m_buildStepList)) + continue; + + const BuildStepInfo &info = factory->stepInfo(); + if (info.flags & BuildStepInfo::Uncreatable) + continue; + + if ((info.flags & BuildStepInfo::UniqueStep) && m_buildStepList->contains(info.id)) + continue; + + QAction *action = menu->addAction(info.displayName); + connect(action, &QAction::triggered, this, [factory, this] { + BuildStep *newStep = factory->create(m_buildStepList); + QTC_ASSERT(newStep, return); + m_buildStepList->appendStep(newStep); + }); } }