diff --git a/src/plugins/autotoolsprojectmanager/autotoolsprojectplugin.cpp b/src/plugins/autotoolsprojectmanager/autotoolsprojectplugin.cpp index c38649ee994..a8b2959340c 100644 --- a/src/plugins/autotoolsprojectmanager/autotoolsprojectplugin.cpp +++ b/src/plugins/autotoolsprojectmanager/autotoolsprojectplugin.cpp @@ -44,7 +44,7 @@ public: setHasMakeInstallEquivalent(true); - setBuildSystemCreator([](Target *t) { return new AutotoolsBuildSystem(t); }); + setBuildSystemCreator(); } }; diff --git a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp index c7118690871..7f27d541cce 100644 --- a/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp +++ b/src/plugins/compilationdatabaseprojectmanager/compilationdatabaseproject.cpp @@ -413,7 +413,7 @@ CompilationDatabaseProject::CompilationDatabaseProject(const Utils::FilePath &pr setId(Constants::COMPILATIONDATABASEPROJECT_ID); setProjectLanguages(Core::Context(ProjectExplorer::Constants::CXX_LANGUAGE_ID)); setDisplayName(projectDirectory().fileName()); - setBuildSystemCreator([](Target *t) { return new CompilationDatabaseBuildSystem(t); }); + setBuildSystemCreator(); setExtraProjectFiles( {projectFile.stringAppended(Constants::COMPILATIONDATABASEPROJECT_FILES_SUFFIX)}); } diff --git a/src/plugins/genericprojectmanager/genericproject.cpp b/src/plugins/genericprojectmanager/genericproject.cpp index 17af30f9ea1..987431f7a6b 100644 --- a/src/plugins/genericprojectmanager/genericproject.cpp +++ b/src/plugins/genericprojectmanager/genericproject.cpp @@ -179,7 +179,7 @@ public: setId(Constants::GENERICPROJECT_ID); setProjectLanguages(Context(ProjectExplorer::Constants::CXX_LANGUAGE_ID)); setDisplayName(filePath.completeBaseName()); - setBuildSystemCreator([](Target *t) { return new GenericBuildSystem(t); }); + setBuildSystemCreator(); } void editFilesTriggered(); diff --git a/src/plugins/haskell/haskellproject.cpp b/src/plugins/haskell/haskellproject.cpp index 4d05ded8901..bb586c7eacb 100644 --- a/src/plugins/haskell/haskellproject.cpp +++ b/src/plugins/haskell/haskellproject.cpp @@ -121,7 +121,7 @@ public: { setId(Constants::C_HASKELL_PROJECT_ID); setDisplayName(fileName.toFileInfo().completeBaseName()); - setBuildSystemCreator([](Target *t) { return new HaskellBuildSystem(t); }); + setBuildSystemCreator(); } }; diff --git a/src/plugins/nim/project/nimbleproject.cpp b/src/plugins/nim/project/nimbleproject.cpp index 0a354832826..5d9d431d688 100644 --- a/src/plugins/nim/project/nimbleproject.cpp +++ b/src/plugins/nim/project/nimbleproject.cpp @@ -24,7 +24,7 @@ NimbleProject::NimbleProject(const Utils::FilePath &fileName) setDisplayName(fileName.completeBaseName()); // ensure debugging is enabled (Nim plugin translates nim code to C code) setProjectLanguages(Core::Context(ProjectExplorer::Constants::CXX_LANGUAGE_ID)); - setBuildSystemCreator([] (Target *t) { return new NimbleBuildSystem(t); }); + setBuildSystemCreator(); } void NimbleProject::toMap(Store &map) const diff --git a/src/plugins/nim/project/nimproject.cpp b/src/plugins/nim/project/nimproject.cpp index 05ce2019a06..7773fa36817 100644 --- a/src/plugins/nim/project/nimproject.cpp +++ b/src/plugins/nim/project/nimproject.cpp @@ -46,7 +46,7 @@ NimProject::NimProject(const FilePath &filePath) : Project(Constants::C_NIM_MIME // ensure debugging is enabled (Nim plugin translates nim code to C code) setProjectLanguages(Core::Context(ProjectExplorer::Constants::CXX_LANGUAGE_ID)); - setBuildSystemCreator([](Target *t) { return new NimBuildSystem(t); }); + setBuildSystemCreator(); } Tasks NimProject::projectIssues(const Kit *k) const diff --git a/src/plugins/projectexplorer/project.cpp b/src/plugins/projectexplorer/project.cpp index a57667e7490..6e8dbb8effd 100644 --- a/src/plugins/projectexplorer/project.cpp +++ b/src/plugins/projectexplorer/project.cpp @@ -1032,7 +1032,7 @@ Task Project::createProjectTask(Task::TaskType type, const QString &description) return Task(type, description, FilePath(), -1, Id()); } -void Project::setBuildSystemCreator(const std::function &creator) +void Project::setBuildSystemCreatorImpl(const std::function &creator) { d->m_buildSystemCreator = creator; } @@ -1404,7 +1404,7 @@ public: { setId(TEST_PROJECT_ID); setDisplayName(TEST_PROJECT_DISPLAYNAME); - setBuildSystemCreator([](Target *t) { return new TestBuildSystem(t); }); + setBuildSystemCreator(); setNeedsBuildConfigurations(false); setNeedsDeployConfigurations(false); diff --git a/src/plugins/projectexplorer/project.h b/src/plugins/projectexplorer/project.h index 192b8a1f43a..af334d49a2e 100644 --- a/src/plugins/projectexplorer/project.h +++ b/src/plugins/projectexplorer/project.h @@ -232,10 +232,13 @@ protected: static ProjectExplorer::Task createProjectTask(ProjectExplorer::Task::TaskType type, const QString &description); - - void setBuildSystemCreator(const std::function &creator); - + template + void setBuildSystemCreator() { + setBuildSystemCreatorImpl([](Target *t) { return new BuildSystemImpl(t); }); + } private: + void setBuildSystemCreatorImpl(const std::function &creator); + void addTarget(std::unique_ptr &&target); void addProjectLanguage(Utils::Id id); diff --git a/src/plugins/projectexplorer/workspaceproject.cpp b/src/plugins/projectexplorer/workspaceproject.cpp index 1951d245eb7..7ff4e04d85e 100644 --- a/src/plugins/projectexplorer/workspaceproject.cpp +++ b/src/plugins/projectexplorer/workspaceproject.cpp @@ -262,7 +262,7 @@ public: setId(Id::fromString(WORKSPACE_PROJECT_ID)); setDisplayName(projectDirectory().fileName()); - setBuildSystemCreator([](Target *t) { return new WorkspaceBuildSystem(t); }); + setBuildSystemCreator(); } FilePath projectDirectory() const override diff --git a/src/plugins/python/pythonproject.cpp b/src/plugins/python/pythonproject.cpp index ed81e8cc8bb..93c3b477816 100644 --- a/src/plugins/python/pythonproject.cpp +++ b/src/plugins/python/pythonproject.cpp @@ -26,7 +26,7 @@ PythonProject::PythonProject(const FilePath &fileName) setProjectLanguages(Context(ProjectExplorer::Constants::PYTHON_LANGUAGE_ID)); setDisplayName(fileName.completeBaseName()); - setBuildSystemCreator([](Target *t) { return new PythonBuildSystem(t); }); + setBuildSystemCreator(); } Tasks PythonProject::projectIssues(const Kit *k) const diff --git a/src/plugins/qmlprojectmanager/qmlproject.cpp b/src/plugins/qmlprojectmanager/qmlproject.cpp index 388169b3756..4ece4b836bd 100644 --- a/src/plugins/qmlprojectmanager/qmlproject.cpp +++ b/src/plugins/qmlprojectmanager/qmlproject.cpp @@ -51,7 +51,7 @@ QmlProject::QmlProject(const Utils::FilePath &fileName) setDisplayName(fileName.completeBaseName()); setNeedsBuildConfigurations(false); - setBuildSystemCreator([](Target *t) { return new QmlBuildSystem(t); }); + setBuildSystemCreator(); if (Core::ICore::isQtDesignStudio()) { if (allowOnlySingleProject()) {