diff --git a/project-generator/src/main/kotlin/io/github/cdsap/projectgenerator/generator/rootproject/SettingsGradle.kt b/project-generator/src/main/kotlin/io/github/cdsap/projectgenerator/generator/rootproject/SettingsGradle.kt index a9fcdb56..55dbd9e1 100644 --- a/project-generator/src/main/kotlin/io/github/cdsap/projectgenerator/generator/rootproject/SettingsGradle.kt +++ b/project-generator/src/main/kotlin/io/github/cdsap/projectgenerator/generator/rootproject/SettingsGradle.kt @@ -4,7 +4,12 @@ import io.github.cdsap.projectgenerator.model.Versions class SettingsGradle { - fun get(versions: Versions, develocity: Boolean, projectName: String): String { + fun get( + versions: Versions, + develocity: Boolean, + projectName: String, + modulePaths: List = emptyList() + ): String { val pluginLines = buildList { if (develocity) { add("""id("com.gradle.develocity") version "${versions.project.develocity}"""") @@ -33,7 +38,7 @@ class SettingsGradle { "" } - return """ + val header = """ |pluginManagement { | includeBuild("build-logic") | repositories { @@ -53,6 +58,11 @@ class SettingsGradle { | } |} """.trimMargin() + + val settingsModules = modulePaths.joinToString(separator = "") { path -> + "\ninclude (\":$path\")" + } + return "$header $settingsModules" } private fun develocityBlock(develocityUrl: String): String { diff --git a/project-generator/src/main/kotlin/io/github/cdsap/projectgenerator/writer/ProjectWriter.kt b/project-generator/src/main/kotlin/io/github/cdsap/projectgenerator/writer/ProjectWriter.kt index fe778a23..e98aea86 100644 --- a/project-generator/src/main/kotlin/io/github/cdsap/projectgenerator/writer/ProjectWriter.kt +++ b/project-generator/src/main/kotlin/io/github/cdsap/projectgenerator/writer/ProjectWriter.kt @@ -93,15 +93,13 @@ class ProjectWriter( develocity: Boolean, projectName: String ) { - var settingsModules = "" - - nodes.forEach { - val layerName = nameMaps.layerNames[it.layer] ?: "layer_${it.layer}" - val moduleName = nameMaps.moduleNames[it.id] ?: it.id - settingsModules += "\ninclude (\":$layerName:$moduleName\")" + val modulePaths = nodes.map { node -> + val layerName = nameMaps.layerNames[node.layer] ?: "layer_${node.layer}" + val moduleName = nameMaps.moduleNames[node.id] ?: node.id + "$layerName:$moduleName" } + val settingsGradleContent = SettingsGradle().get(versions, develocity, projectName, modulePaths) languages.forEach { - val settingsGradleContent = "${SettingsGradle().get(versions, develocity, projectName)} $settingsModules" File("${it.projectName}/settings.${it.extension}").projectFile(settingsGradleContent) } } diff --git a/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/generator/rootproject/SettingsGradleTest.kt b/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/generator/rootproject/SettingsGradleTest.kt index 62f34d41..39063267 100644 --- a/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/generator/rootproject/SettingsGradleTest.kt +++ b/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/generator/rootproject/SettingsGradleTest.kt @@ -36,4 +36,48 @@ class SettingsGradleTest { assertTrue(result.contains("com.fueledbycaffeine.spotlight")) assertTrue(result.contains("1.4.1")) } + + @Test + fun `renders module include statements for mapped paths`() { + val result = SettingsGradle().get( + Versions(), + develocity = false, + projectName = "testProject", + modulePaths = listOf("layer_1:sample-lib", "app:app") + ) + + assertTrue(result.contains("include (\":layer_1:sample-lib\")")) + assertTrue(result.contains("include (\":app:app\")")) + } + + @Test + fun `preserves module include ordering`() { + val result = SettingsGradle().get( + Versions(), + develocity = false, + projectName = "testProject", + modulePaths = listOf("layer_0:alpha", "layer_1:beta", "app:app") + ) + + val alpha = result.indexOf("include (\":layer_0:alpha\")") + val beta = result.indexOf("include (\":layer_1:beta\")") + val app = result.indexOf("include (\":app:app\")") + + assertTrue(alpha >= 0) + assertTrue(beta > alpha) + assertTrue(app > beta) + } + + @Test + fun `appends includes after settings header with legacy spacing`() { + val withModules = SettingsGradle().get( + Versions(), + develocity = false, + projectName = "testProject", + modulePaths = listOf("layer_1:lib") + ) + + assertTrue(withModules.contains("} \ninclude (\":layer_1:lib\")")) + assertTrue(withModules.endsWith("include (\":layer_1:lib\")")) + } }