From 2b656e21e8fce498158c80a2a21222ce42f50e8c Mon Sep 17 00:00:00 2001 From: Inaki Villar Date: Wed, 16 Sep 2026 09:43:05 -0700 Subject: [PATCH] fix: refactor projectwriter to receive immutable project name mappings --- .../projectgenerator/ProjectGenerator.kt | 3 +- .../projectgenerator/writer/ProjectWriter.kt | 9 +-- .../BuildFilesGeneratorAndroidTest.kt | 10 ++- .../buildfiles/BuildFilesGeneratorJvmTest.kt | 7 ++- .../test/TestGeneratorAndroidTest.kt | 4 +- .../generator/test/TestGeneratorJvmTest.kt | 4 +- .../writer/ProjectWriterTest.kt | 61 ++++++++++++++++--- 7 files changed, 77 insertions(+), 21 deletions(-) diff --git a/project-generator/src/main/kotlin/io/github/cdsap/projectgenerator/ProjectGenerator.kt b/project-generator/src/main/kotlin/io/github/cdsap/projectgenerator/ProjectGenerator.kt index 4d8bbe00..15b9c629 100644 --- a/project-generator/src/main/kotlin/io/github/cdsap/projectgenerator/ProjectGenerator.kt +++ b/project-generator/src/main/kotlin/io/github/cdsap/projectgenerator/ProjectGenerator.kt @@ -55,7 +55,8 @@ class ProjectGenerator( generateUnitTest, gradle, develocity, - projectName + projectName, + nameMaps ).write() projectLanguageAttributes.forEach { attributes -> GraphWriter(nodes, attributes.projectName, nameMaps).write() 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 925719b1..fe778a23 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 @@ -1,12 +1,12 @@ package io.github.cdsap.projectgenerator.writer +import io.github.cdsap.projectgenerator.ProjectNameMaps import io.github.cdsap.projectgenerator.generator.rootproject.BuildGradle import io.github.cdsap.projectgenerator.generator.rootproject.GradleProperties import io.github.cdsap.projectgenerator.generator.rootproject.SettingsGradle import io.github.cdsap.projectgenerator.generator.extension.projectFile import io.github.cdsap.projectgenerator.generator.rootproject.Gitignore import io.github.cdsap.projectgenerator.generator.toml.AndroidToml -import io.github.cdsap.projectgenerator.NameMappings import io.github.cdsap.projectgenerator.model.LanguageAttributes import io.github.cdsap.projectgenerator.model.ProjectGraph import io.github.cdsap.projectgenerator.model.TypeOfStringResources @@ -24,7 +24,8 @@ class ProjectWriter( private val generateUnitTest: Boolean, private val gradle: GradleWrapper, private val develocity: Boolean, - private val projectName: String + private val projectName: String, + private val nameMaps: ProjectNameMaps ) { fun write() { println("Creating Convention Plugin files") @@ -95,8 +96,8 @@ class ProjectWriter( var settingsModules = "" nodes.forEach { - val layerName = NameMappings.layerName(it.layer) - val moduleName = NameMappings.moduleName(it.id) + val layerName = nameMaps.layerNames[it.layer] ?: "layer_${it.layer}" + val moduleName = nameMaps.moduleNames[it.id] ?: it.id settingsModules += "\ninclude (\":$layerName:$moduleName\")" } languages.forEach { diff --git a/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/generator/buildfiles/BuildFilesGeneratorAndroidTest.kt b/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/generator/buildfiles/BuildFilesGeneratorAndroidTest.kt index 52e242d5..ad5c71a7 100644 --- a/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/generator/buildfiles/BuildFilesGeneratorAndroidTest.kt +++ b/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/generator/buildfiles/BuildFilesGeneratorAndroidTest.kt @@ -2,6 +2,7 @@ package io.github.cdsap.projectgenerator.generator.buildfiles import io.github.cdsap.projectgenerator.DefaultTestVersions.Companion.LATEST_GRADLE import io.github.cdsap.projectgenerator.NameMappings +import io.github.cdsap.projectgenerator.ProjectNameMaps import io.github.cdsap.projectgenerator.writer.ProjectWriter import io.github.cdsap.projectgenerator.model.Gradle import io.github.cdsap.projectgenerator.model.Android @@ -43,7 +44,8 @@ class BuildFilesGeneratorAndroidTest { false, GradleWrapper(LATEST_GRADLE), false, - "" + "", + ProjectNameMaps(emptyMap(), emptyMap()) ) projectWriter.write() val buildFile = File("${tempDir.path}/${NameMappings.layerName(1)}/module_1_1/build.gradle.kts") @@ -76,7 +78,8 @@ class BuildFilesGeneratorAndroidTest { false, GradleWrapper(LATEST_GRADLE), false, - "" + "", + ProjectNameMaps(emptyMap(), emptyMap()) ) projectWriter.write() val buildFile = File("${tempDir.path}/${NameMappings.layerName(1)}/module_1_1/build.gradle.kts") @@ -110,7 +113,8 @@ class BuildFilesGeneratorAndroidTest { true, GradleWrapper(LATEST_GRADLE), false, - "" + "", + ProjectNameMaps(emptyMap(), emptyMap()) ) projectWriter.write() diff --git a/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/generator/buildfiles/BuildFilesGeneratorJvmTest.kt b/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/generator/buildfiles/BuildFilesGeneratorJvmTest.kt index a79fe1dd..e3753d44 100644 --- a/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/generator/buildfiles/BuildFilesGeneratorJvmTest.kt +++ b/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/generator/buildfiles/BuildFilesGeneratorJvmTest.kt @@ -2,6 +2,7 @@ package io.github.cdsap.projectgenerator.generator.buildfiles import io.github.cdsap.projectgenerator.DefaultTestVersions.Companion.LATEST_GRADLE import io.github.cdsap.projectgenerator.NameMappings +import io.github.cdsap.projectgenerator.ProjectNameMaps import io.github.cdsap.projectgenerator.writer.ProjectWriter import io.github.cdsap.projectgenerator.model.Gradle import io.github.cdsap.projectgenerator.model.LanguageAttributes @@ -42,7 +43,8 @@ class BuildFilesGeneratorJvmTest { false, GradleWrapper(LATEST_GRADLE), false, - "" + "", + ProjectNameMaps(emptyMap(), emptyMap()) ) projectWriter.write() val buildFile = File("${tempDir.path}/${NameMappings.layerName(1)}/module_1_1/build.gradle.kts") @@ -74,7 +76,8 @@ class BuildFilesGeneratorJvmTest { false, GradleWrapper(LATEST_GRADLE), false, - "" + "", + ProjectNameMaps(emptyMap(), emptyMap()) ) projectWriter.write() val buildFile = File("${tempDir.path}/${NameMappings.layerName(1)}/module_1_1/build.gradle.kts") diff --git a/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/generator/test/TestGeneratorAndroidTest.kt b/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/generator/test/TestGeneratorAndroidTest.kt index c0eeb929..da03fd28 100644 --- a/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/generator/test/TestGeneratorAndroidTest.kt +++ b/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/generator/test/TestGeneratorAndroidTest.kt @@ -2,6 +2,7 @@ package io.github.cdsap.projectgenerator.generator.test import io.github.cdsap.projectgenerator.DefaultTestVersions.Companion.LATEST_GRADLE import io.github.cdsap.projectgenerator.NameMappings +import io.github.cdsap.projectgenerator.ProjectNameMaps import io.github.cdsap.projectgenerator.generator.classes.GenerateDictionaryAndroid import io.github.cdsap.projectgenerator.model.* import io.github.cdsap.projectgenerator.writer.GradleWrapper @@ -34,7 +35,8 @@ class TestGeneratorAndroidTest { true, // generateUnitTest GradleWrapper(LATEST_GRADLE), false, - "" + "", + ProjectNameMaps(emptyMap(), emptyMap()) ) projectWriter.write() val testFile = File(tempDir, "${NameMappings.layerName(1)}/module_1_1/src/test/kotlin/com/awesomeapp/module_1_1/Viewmodel1_1Test.kt") diff --git a/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/generator/test/TestGeneratorJvmTest.kt b/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/generator/test/TestGeneratorJvmTest.kt index 9dfea7d9..89c9e629 100644 --- a/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/generator/test/TestGeneratorJvmTest.kt +++ b/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/generator/test/TestGeneratorJvmTest.kt @@ -2,6 +2,7 @@ package io.github.cdsap.projectgenerator.generator.test import io.github.cdsap.projectgenerator.DefaultTestVersions.Companion.LATEST_GRADLE import io.github.cdsap.projectgenerator.NameMappings +import io.github.cdsap.projectgenerator.ProjectNameMaps import io.github.cdsap.projectgenerator.writer.ProjectWriter import io.github.cdsap.projectgenerator.model.* import io.github.cdsap.projectgenerator.writer.GradleWrapper @@ -32,7 +33,8 @@ class TestGeneratorJvmTest { true, // generateUnitTest GradleWrapper(LATEST_GRADLE), false, - "" + "", + ProjectNameMaps(emptyMap(), emptyMap()) ) projectWriter.write() val testFile = File(tempDir, "${NameMappings.layerName(1)}/module_1_1/src/test/kotlin/com/awesomeapp/module_1_1/Usecase1_1Test.kt") diff --git a/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/writer/ProjectWriterTest.kt b/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/writer/ProjectWriterTest.kt index 996caf3a..cec49989 100644 --- a/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/writer/ProjectWriterTest.kt +++ b/project-generator/src/test/kotlin/io/github/cdsap/projectgenerator/writer/ProjectWriterTest.kt @@ -16,6 +16,8 @@ class ProjectWriterTest { @TempDir lateinit var tempDir: Path + private val emptyNameMaps = ProjectNameMaps(emptyMap(), emptyMap()) + @Test fun testWriteProject() { val nodes = listOf( @@ -42,7 +44,8 @@ class ProjectWriterTest { false, GradleWrapper(OLDEST_SUPPORTED_GRADLE), true, - "awesomeapp" + "awesomeapp", + emptyNameMaps ) projectWriter.write() @@ -85,7 +88,8 @@ class ProjectWriterTest { false, GradleWrapper(LATEST_GRADLE), false, - "manual_room_none" + "manual_room_none", + emptyNameMaps ) projectWriter.write() @@ -116,7 +120,8 @@ class ProjectWriterTest { false, GradleWrapper(LATEST_GRADLE), false, - "kmp_android_lib_alias" + "kmp_android_lib_alias", + emptyNameMaps ) projectWriter.write() @@ -141,7 +146,8 @@ class ProjectWriterTest { false, GradleWrapper(LATEST_GRADLE), false, - "hilt_lean_graph" + "hilt_lean_graph", + emptyNameMaps ) projectWriter.write() @@ -155,10 +161,13 @@ class ProjectWriterTest { @Test fun `limits hilt android entry points to app launcher activity`() { + val nameMaps = ProjectNameMaps( + layerNames = mapOf(1 to "layer_1", 2 to "app"), + moduleNames = mapOf("module_1_1" to "sample-lib", "module_2_1" to "app") + ) val previousLayerNames = NameMappings.layerNames val previousModuleNames = NameMappings.moduleNames - NameMappings.layerNames = mapOf(1 to "layer_1", 2 to "app") - NameMappings.moduleNames = mapOf("module_1_1" to "sample-lib", "module_2_1" to "app") + NameMappings.configure(nameMaps) try { val nodes = listOf( ProjectGraph("module_1_1", 1, emptyList(), TypeProject.ANDROID_LIB, 12), @@ -175,7 +184,8 @@ class ProjectWriterTest { false, GradleWrapper(LATEST_GRADLE), false, - "hilt_entrypoints" + "hilt_entrypoints", + nameMaps ) projectWriter.write() @@ -198,6 +208,37 @@ class ProjectWriterTest { } } + @Test + fun `writes settings includes from ProjectNameMaps`() { + val nodes = listOf( + ProjectGraph("module_1_1", 1, emptyList(), TypeProject.ANDROID_LIB, 10), + ProjectGraph("module_2_1", 2, emptyList(), TypeProject.ANDROID_APP, 10) + ) + val nameMaps = ProjectNameMaps( + layerNames = mapOf(1 to "layer_1", 2 to "app"), + moduleNames = mapOf("module_1_1" to "sample-lib", "module_2_1" to "app") + ) + val language = LanguageAttributes("gradle.kts", "${tempDir}/project_settings_maps") + val projectWriter = ProjectWriter( + nodes, + listOf(language), + Versions(), + TypeProjectRequested.ANDROID, + TypeOfStringResources.NORMAL, + false, + GradleWrapper(LATEST_GRADLE), + false, + "settings_maps", + nameMaps + ) + + projectWriter.write() + + val settingsContent = File("${language.projectName}/settings.gradle.kts").readText() + assertTrue(settingsContent.contains("include (\":layer_1:sample-lib\")")) + assertTrue(settingsContent.contains("include (\":app:app\")")) + } + @Test fun `does not include settings or build plugins when additionalSettingsPlugins and additionalBuildGradleRootPlugins are empty`() { val nodes = listOf( @@ -217,7 +258,8 @@ class ProjectWriterTest { false, GradleWrapper(LATEST_GRADLE), false, - "no_plugins_project" + "no_plugins_project", + emptyNameMaps ) projectWriter.write() @@ -253,7 +295,8 @@ class ProjectWriterTest { true, GradleWrapper(LATEST_GRADLE), false, - "kmp_android_main_layout" + "kmp_android_main_layout", + emptyNameMaps ) projectWriter.write()