diff --git a/src/plugins/incredibuild/cmakecommandbuilder.cpp b/src/plugins/incredibuild/cmakecommandbuilder.cpp index c1dd15b23ec..23fe80c215c 100644 --- a/src/plugins/incredibuild/cmakecommandbuilder.cpp +++ b/src/plugins/incredibuild/cmakecommandbuilder.cpp @@ -26,15 +26,12 @@ #include "cmakecommandbuilder.h" #include -#include #include -#include -#include -#include -#include #include +#include // Compile-time only + #include #include @@ -43,19 +40,9 @@ using namespace ProjectExplorer; namespace IncrediBuild { namespace Internal { -bool CMakeCommandBuilder::canMigrate(BuildStepList *buildStepList) +QList CMakeCommandBuilder::migratableSteps() const { - // "Make" - QString makeClassName("CMakeProjectManager::Internal::CMakeBuildStep"); - for (int i = buildStepList->count() - 1; i >= 0; --i) { - QString className = QString::fromUtf8(buildStepList->at(i)->metaObject()->className()); - if (className.compare(makeClassName) == 0) { - buildStepList->at(i)->setEnabled(false); - buildStepList->at(i)->projectConfiguration()->project()->saveSettings(); - return true; - } - } - return false; + return {CMakeProjectManager::Constants::CMAKE_BUILD_STEP_ID}; } QString CMakeCommandBuilder::defaultCommand() const diff --git a/src/plugins/incredibuild/cmakecommandbuilder.h b/src/plugins/incredibuild/cmakecommandbuilder.h index 37582c8746f..3b1014ff9b7 100644 --- a/src/plugins/incredibuild/cmakecommandbuilder.h +++ b/src/plugins/incredibuild/cmakecommandbuilder.h @@ -36,7 +36,7 @@ public: CMakeCommandBuilder(ProjectExplorer::BuildStep *buildStep) : CommandBuilder(buildStep) {} private: - bool canMigrate(ProjectExplorer::BuildStepList *buildStepList) final; + QList migratableSteps() const final; QString id() const final { return "CMakeCommandBuilder"; } QString displayName() const final { return tr("CMake"); } QString defaultCommand() const final; diff --git a/src/plugins/incredibuild/commandbuilder.h b/src/plugins/incredibuild/commandbuilder.h index 0f7f65786bc..82fa72df56a 100644 --- a/src/plugins/incredibuild/commandbuilder.h +++ b/src/plugins/incredibuild/commandbuilder.h @@ -25,7 +25,7 @@ #pragma once -#include +#include #include @@ -40,7 +40,7 @@ public: CommandBuilder(ProjectExplorer::BuildStep *buildStep) : m_buildStep(buildStep) {} virtual ~CommandBuilder() = default; - virtual bool canMigrate(ProjectExplorer::BuildStepList*) { return false; } + virtual QList migratableSteps() const { return {}; } ProjectExplorer::BuildStep *buildStep() const { return m_buildStep; } diff --git a/src/plugins/incredibuild/commandbuilderaspect.cpp b/src/plugins/incredibuild/commandbuilderaspect.cpp index 5a62d0ffc70..fa80d83d08d 100644 --- a/src/plugins/incredibuild/commandbuilderaspect.cpp +++ b/src/plugins/incredibuild/commandbuilderaspect.cpp @@ -30,6 +30,8 @@ #include "makecommandbuilder.h" #include +#include +#include #include #include @@ -69,7 +71,7 @@ public: &m_cmakeCommandBuilder }; - // Default to the first in list, which should be the "Custom Command" + // Default to "Custom Command", but try to upgrade in tryToMigrate() later. CommandBuilder *m_activeCommandBuilder = m_commandBuilders[0]; bool m_loadedFromMap = false; @@ -115,12 +117,17 @@ void CommandBuilderAspectPrivate::setActiveCommandBuilder(const QString &command void CommandBuilderAspectPrivate::tryToMigrate() { - // This constructor is called when creating a fresh build step. + // This function is called when creating a fresh build step. // Attempt to detect build system from pre-existing steps. for (CommandBuilder *p : m_commandBuilders) { - if (p->canMigrate(m_buildStep->stepList())) { - m_activeCommandBuilder = p; - break; + const QList migratableSteps = p->migratableSteps(); + for (Utils::Id stepId : migratableSteps) { + if (BuildStep *bs = m_buildStep->stepList()->firstStepWithId(stepId)) { + m_activeCommandBuilder = p; + bs->setEnabled(false); + m_buildStep->project()->saveSettings(); + return; + } } } } diff --git a/src/plugins/incredibuild/makecommandbuilder.cpp b/src/plugins/incredibuild/makecommandbuilder.cpp index fe0f170a857..5f0897054d6 100644 --- a/src/plugins/incredibuild/makecommandbuilder.cpp +++ b/src/plugins/incredibuild/makecommandbuilder.cpp @@ -34,6 +34,8 @@ #include #include +#include // Compile-time only + #include #include #include @@ -43,19 +45,9 @@ using namespace ProjectExplorer; namespace IncrediBuild { namespace Internal { -bool MakeCommandBuilder::canMigrate(BuildStepList *buildStepList) +QList MakeCommandBuilder::migratableSteps() const { - // "Make" - QString makeClassName("QmakeProjectManager::QmakeMakeStep"); - for (int i = buildStepList->count() - 1; i >= 0; --i) { - QString className = QString::fromUtf8(buildStepList->at(i)->metaObject()->className()); - if (className.compare(makeClassName) == 0) { - buildStepList->at(i)->setEnabled(false); - buildStepList->at(i)->projectConfiguration()->project()->saveSettings(); - return true; - } - } - return false; + return {QmakeProjectManager::Constants::MAKESTEP_BS_ID}; } QString MakeCommandBuilder::defaultCommand() const diff --git a/src/plugins/incredibuild/makecommandbuilder.h b/src/plugins/incredibuild/makecommandbuilder.h index 65c42baf538..4cea748f929 100644 --- a/src/plugins/incredibuild/makecommandbuilder.h +++ b/src/plugins/incredibuild/makecommandbuilder.h @@ -36,7 +36,7 @@ public: MakeCommandBuilder(ProjectExplorer::BuildStep *buildStep) : CommandBuilder(buildStep) {} private: - bool canMigrate(ProjectExplorer::BuildStepList *buildStepList) final; + QList migratableSteps() const final; QString id() const final { return "MakeCommandBuilder"; } QString displayName() const final { return tr("Make"); } QString defaultCommand() const final;