Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package io.github.cdsap.projectgenerator.generator

import io.github.cdsap.projectgenerator.NameMappings
import io.github.cdsap.projectgenerator.ProjectNameMaps
import io.github.cdsap.projectgenerator.generator.android.AndroidSourceSetLayout
import io.github.cdsap.projectgenerator.model.ModuleClassDefinitionAndroid
import io.github.cdsap.projectgenerator.model.ProjectGraph
Expand All @@ -9,17 +9,14 @@ import java.io.File

class GeneratedModuleLayout private constructor(
private val projectName: String,
private val layer: Int,
private val moduleId: String,
private val layerDir: String,
private val moduleDir: String,
private val packageDir: String,
private val mainKotlinSourceDir: String,
private val testKotlinSourceDir: String,
private val resourcesSourceDir: String,
private val manifestSourceDir: String
) {
private val layerDir: String = NameMappings.layerName(layer)
private val moduleDir: String = NameMappings.moduleName(moduleId)
private val packageDir: String = NameMappings.modulePackageName(moduleId)

fun mainKotlinPackageDir(): File =
File("$projectName/$layerDir/$moduleDir/$mainKotlinSourceDir/com/awesomeapp/$packageDir/")

Expand All @@ -39,40 +36,46 @@ class GeneratedModuleLayout private constructor(
fun of(
projectName: String,
node: ProjectGraph,
kotlinMultiplatformLibrary: Boolean
kotlinMultiplatformLibrary: Boolean,
nameMaps: ProjectNameMaps
): GeneratedModuleLayout =
of(
projectName = projectName,
layer = node.layer,
moduleId = node.id,
type = node.type,
kotlinMultiplatformLibrary = kotlinMultiplatformLibrary
kotlinMultiplatformLibrary = kotlinMultiplatformLibrary,
nameMaps = nameMaps
)

fun of(
projectName: String,
moduleDefinition: ModuleClassDefinitionAndroid,
kotlinMultiplatformLibrary: Boolean
kotlinMultiplatformLibrary: Boolean,
nameMaps: ProjectNameMaps
): GeneratedModuleLayout =
of(
projectName = projectName,
layer = moduleDefinition.layer,
moduleId = moduleDefinition.moduleId,
type = moduleDefinition.projectType ?: TypeProject.ANDROID_LIB,
kotlinMultiplatformLibrary = kotlinMultiplatformLibrary
kotlinMultiplatformLibrary = kotlinMultiplatformLibrary,
nameMaps = nameMaps
)

fun of(
projectName: String,
node: ProjectGraph,
mainKotlinSourceDir: String,
testKotlinSourceDir: String,
nameMaps: ProjectNameMaps,
kotlinMultiplatformLibrary: Boolean = false
): GeneratedModuleLayout =
GeneratedModuleLayout(
projectName = projectName,
layer = node.layer,
moduleId = node.id,
layerDir = layerDir(nameMaps, node.layer),
moduleDir = moduleDir(nameMaps, node.id),
packageDir = packageDir(nameMaps, node.id),
mainKotlinSourceDir = mainKotlinSourceDir,
testKotlinSourceDir = testKotlinSourceDir,
resourcesSourceDir = AndroidSourceSetLayout.resourcesSourceDir(
Expand All @@ -90,12 +93,14 @@ class GeneratedModuleLayout private constructor(
layer: Int,
moduleId: String,
type: TypeProject,
kotlinMultiplatformLibrary: Boolean
kotlinMultiplatformLibrary: Boolean,
nameMaps: ProjectNameMaps
): GeneratedModuleLayout =
GeneratedModuleLayout(
projectName = projectName,
layer = layer,
moduleId = moduleId,
layerDir = layerDir(nameMaps, layer),
moduleDir = moduleDir(nameMaps, moduleId),
packageDir = packageDir(nameMaps, moduleId),
mainKotlinSourceDir = AndroidSourceSetLayout.kotlinMainSourceDir(
type,
kotlinMultiplatformLibrary
Expand All @@ -113,5 +118,14 @@ class GeneratedModuleLayout private constructor(
kotlinMultiplatformLibrary
)
)

private fun layerDir(nameMaps: ProjectNameMaps, layer: Int): String =
nameMaps.layerNames[layer] ?: "layer_$layer"

private fun moduleDir(nameMaps: ProjectNameMaps, moduleId: String): String =
nameMaps.moduleNames[moduleId] ?: moduleId

private fun packageDir(nameMaps: ProjectNameMaps, moduleId: String): String =
moduleDir(nameMaps, moduleId).replace("-", "")
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import io.github.cdsap.projectgenerator.generator.GeneratedModuleLayout
import io.github.cdsap.projectgenerator.generator.android.AndroidSourceSetLayout
import io.github.cdsap.projectgenerator.model.*
import io.github.cdsap.projectgenerator.NameMappings
import io.github.cdsap.projectgenerator.ProjectNameMaps
import io.github.cdsap.projectgenerator.generator.ClassGenerator
import java.io.File
import java.util.concurrent.CopyOnWriteArrayList
Expand All @@ -21,7 +22,8 @@ data class GenerateDictionaryAndroid(

class ClassGeneratorAndroid(
private val di: DependencyInjection,
private val kotlinMultiplatformLibrary: Boolean = false
private val kotlinMultiplatformLibrary: Boolean = false,
private val nameMaps: ProjectNameMaps
) :
ClassGenerator<ModuleClassDefinitionAndroid, GenerateDictionaryAndroid> {

Expand Down Expand Up @@ -753,7 +755,8 @@ class ClassGeneratorAndroid(
val directory = GeneratedModuleLayout.of(
projectName,
moduleDefinition,
kotlinMultiplatformLibrary
kotlinMultiplatformLibrary,
nameMaps
).mainKotlinPackageDir()
directory.mkdirs()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import io.github.cdsap.projectgenerator.generator.android.Manifest
import io.github.cdsap.projectgenerator.generator.android.ValuesStrings
import io.github.cdsap.projectgenerator.generator.ResourceGeneratorA
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.DependencyInjection
import io.github.cdsap.projectgenerator.model.LanguageAttributes
Expand All @@ -21,7 +22,8 @@ import java.util.concurrent.CopyOnWriteArrayList
class ResourceGenerator(
private val di: DependencyInjection,
private val roomDatabase: Boolean = false,
private val kotlinMultiplatformLibrary: Boolean = false
private val kotlinMultiplatformLibrary: Boolean = false,
private val nameMaps: ProjectNameMaps
) : ResourceGeneratorA<GenerateDictionaryAndroid> {

override fun generate(
Expand All @@ -30,7 +32,7 @@ class ResourceGenerator(
typeOfStringResources: TypeOfStringResources,
classesDictionary: MutableMap<String, CopyOnWriteArrayList<GenerateDictionaryAndroid>>
) {
val layout = GeneratedModuleLayout.of(lang.projectName, node, kotlinMultiplatformLibrary)
val layout = GeneratedModuleLayout.of(lang.projectName, node, kotlinMultiplatformLibrary, nameMaps)
layout.resourcesLayoutDir().mkdirs()
layout.resourcesValuesDir().mkdirs()
ClassTheme(kotlinMultiplatformLibrary).createThemeFile(node, lang)
Expand Down Expand Up @@ -72,7 +74,7 @@ class ResourceGenerator(
lang: LanguageAttributes,
node: ProjectGraph
): Triple<File, File, File> {
val layout = GeneratedModuleLayout.of(lang.projectName, node, kotlinMultiplatformLibrary)
val layout = GeneratedModuleLayout.of(lang.projectName, node, kotlinMultiplatformLibrary, nameMaps)
return Triple(layout.resourcesLayoutDir(), layout.resourcesValuesDir(), layout.manifestDir())
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,14 @@ import io.github.cdsap.projectgenerator.model.ClassDependencyAndroid
import io.github.cdsap.projectgenerator.model.ClassTypeAndroid
import io.github.cdsap.projectgenerator.model.ModuleClassDefinitionAndroid
import io.github.cdsap.projectgenerator.NameMappings
import io.github.cdsap.projectgenerator.ProjectNameMaps
import java.io.File
import java.util.concurrent.CopyOnWriteArrayList


class TestGeneratorAndroid(
private val kotlinMultiplatformLibrary: Boolean = false
private val kotlinMultiplatformLibrary: Boolean = false,
private val nameMaps: ProjectNameMaps
) : TestGenerator<ModuleClassDefinitionAndroid, GenerateDictionaryAndroid> {


Expand All @@ -25,7 +27,8 @@ class TestGeneratorAndroid(
val testDir = GeneratedModuleLayout.of(
projectName,
moduleDefinition,
kotlinMultiplatformLibrary
kotlinMultiplatformLibrary,
nameMaps
).testKotlinPackageDir()
testDir.mkdirs()

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package io.github.cdsap.projectgenerator.writer

import io.github.cdsap.projectgenerator.ProjectNameMaps
import io.github.cdsap.projectgenerator.generator.buildfiles.BuildFilesGeneratorAndroid
import io.github.cdsap.projectgenerator.generator.classes.ClassGeneratorAndroid
import io.github.cdsap.projectgenerator.generator.classes.ClassGeneratorAndroidLegacy
Expand All @@ -17,24 +18,31 @@ class AndroidModulesWriter(
typeOfStringResources: TypeOfStringResources,
generateUnitTest: Boolean,
versions: Versions,
di: DependencyInjection
di: DependencyInjection,
nameMaps: ProjectNameMaps
) : ModulesWrite<ModuleClassDefinitionAndroid, GenerateDictionaryAndroid>(
classGenerator = if (versions.android.roomDatabase) {
ClassGeneratorAndroid(di, versions.android.kotlinMultiplatformLibrary)
ClassGeneratorAndroid(di, versions.android.kotlinMultiplatformLibrary, nameMaps)
} else {
ClassGeneratorAndroidLegacy(di, versions.android.kotlinMultiplatformLibrary)
},
classPlanner = if (versions.android.roomDatabase) ModuleClassPlannerAndroid() else ModuleClassPlannerAndroidLegacy(),
testGenerator = if (versions.android.roomDatabase) {
TestGeneratorAndroid(versions.android.kotlinMultiplatformLibrary)
TestGeneratorAndroid(versions.android.kotlinMultiplatformLibrary, nameMaps)
} else {
TestGeneratorAndroidLegacy(versions.android.kotlinMultiplatformLibrary)
},
resourceGeneratorA = ResourceGenerator(di, versions.android.roomDatabase, versions.android.kotlinMultiplatformLibrary),
resourceGeneratorA = ResourceGenerator(
di,
versions.android.roomDatabase,
versions.android.kotlinMultiplatformLibrary,
nameMaps
),
generateUnitTest = generateUnitTest,
buildFilesGenerator = BuildFilesGeneratorAndroid(versions, di),
resources = typeOfStringResources,
nodes = nodes,
languages = languages,
nameMaps = nameMaps,
sourceSetLayout = AndroidModuleSourceSetLayout(versions.android.kotlinMultiplatformLibrary)
)
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package io.github.cdsap.projectgenerator.writer

import io.github.cdsap.projectgenerator.ProjectNameMaps
import io.github.cdsap.projectgenerator.generator.buildfiles.BuildFilesGeneratorJvm
import io.github.cdsap.projectgenerator.generator.planner.ModuleClassPlannerJvm
import io.github.cdsap.projectgenerator.generator.classes.ClassGeneratorJvm
Expand All @@ -15,7 +16,8 @@ class JvmModulesWriter(
nodes: List<ProjectGraph>,
languages: List<LanguageAttributes>,
generateUnitTest: Boolean,
versions: Versions
versions: Versions,
nameMaps: ProjectNameMaps
) : ModulesWrite<ModuleClassDefinitionJvm, GenerateDictionaryJvm>(
classGenerator = ClassGeneratorJvm(),
classPlanner = ModuleClassPlannerJvm(),
Expand All @@ -24,5 +26,6 @@ class JvmModulesWriter(
buildFilesGenerator = BuildFilesGeneratorJvm(),
nodes = nodes,
languages = languages,
nameMaps = nameMaps,
sourceSetLayout = JvmModuleSourceSetLayout
)
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package io.github.cdsap.projectgenerator.writer

import io.github.cdsap.projectgenerator.ProjectNameMaps
import io.github.cdsap.projectgenerator.generator.BuildFilesGenerator
import io.github.cdsap.projectgenerator.generator.ClassGenerator
import io.github.cdsap.projectgenerator.generator.GeneratedModuleLayout
Expand All @@ -26,6 +27,7 @@ abstract class ModulesWrite<MODULE_DEF, DICT>(
private val resources: TypeOfStringResources? = null,
private val nodes: List<ProjectGraph>,
private val languages: List<LanguageAttributes>,
private val nameMaps: ProjectNameMaps,
private val sourceSetLayout: ModuleSourceSetLayout = JvmModuleSourceSetLayout
) {
suspend fun write() = coroutineScope {
Expand Down Expand Up @@ -72,7 +74,8 @@ abstract class ModulesWrite<MODULE_DEF, DICT>(
projectName = lang.projectName,
node = node,
mainKotlinSourceDir = sourceSetLayout.mainKotlinDir(node),
testKotlinSourceDir = sourceSetLayout.testKotlinDir(node)
testKotlinSourceDir = sourceSetLayout.testKotlinDir(node),
nameMaps = nameMaps
)
layout.mainKotlinPackageDir().mkdirs()

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package io.github.cdsap.projectgenerator.writer

import io.github.cdsap.projectgenerator.NameMappings
import io.github.cdsap.projectgenerator.ProjectNameMaps
import io.github.cdsap.projectgenerator.generator.rootproject.BuildGradle
import io.github.cdsap.projectgenerator.generator.rootproject.GradleProperties
Expand Down Expand Up @@ -28,6 +29,7 @@ class ProjectWriter(
private val nameMaps: ProjectNameMaps
) {
fun write() {
NameMappings.configure(nameMaps)
println("Creating Convention Plugin files")
ConventionPluginWriter(languages, versions, typeOfProjectRequested).write()
println("Creating Modules files")
Expand All @@ -39,10 +41,17 @@ class ProjectWriter(
typeOfStringResources,
generateUnitTest,
versions,
versions.di
versions.di,
nameMaps
).write()

TypeProjectRequested.JVM -> JvmModulesWriter(nodes, languages, generateUnitTest, versions).write()
TypeProjectRequested.JVM -> JvmModulesWriter(
nodes,
languages,
generateUnitTest,
versions,
nameMaps
).write()
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -76,23 +76,37 @@ class ProjectGeneratorTest {
@Test
fun `projectGenerator configures NameMappings before writing project files`() {
val layers = 2
ProjectGenerator(
modules = 6,
shape = Shape.RECTANGLE,
language = Language.KTS,
classesPerModule = ClassesPerModule(ClassesPerModuleType.FIXED, 10),
layers = layers,
layerNames = listOf("platform"),
moduleNameParts = listOf("alpha", "beta"),
projectRootPath = tempDir.toString(),
projectName = "named_project"
).write()
val previousLayers = NameMappings.layerNames
val previousModules = NameMappings.moduleNames
try {
ProjectGenerator(
modules = 6,
shape = Shape.RECTANGLE,
language = Language.KTS,
classesPerModule = ClassesPerModule(ClassesPerModuleType.FIXED, 10),
layers = layers,
layerNames = listOf("platform"),
moduleNameParts = listOf("alpha", "beta"),
projectRootPath = tempDir.toString(),
projectName = "named_project"
).write()

assert(NameMappings.layerName(0) == "platform")
assert(NameMappings.layerName(1) == "layer_1")
assert(NameMappings.layerName(layers) == "app")
assert(NameMappings.moduleNames.values.contains("app"))
assert(NameMappings.moduleNames.values.any { it == "alpha" || it == "beta" || it.contains("-") })
assert(File("$tempDir/settings.gradle.kts").readText().contains(":app:app"))
assert(NameMappings.layerName(0) == "platform")
assert(NameMappings.layerName(1) == "layer_1")
assert(NameMappings.layerName(layers) == "app")
assert(NameMappings.moduleNames.values.contains("app"))
assert(NameMappings.moduleNames.values.any { it == "alpha" || it == "beta" || it.contains("-") })
assert(File("$tempDir/settings.gradle.kts").readText().contains(":app:app"))
assert(File("$tempDir/platform").isDirectory)
assert(File("$tempDir/app").isDirectory)
assert(
File("$tempDir").walkTopDown().any {
it.isDirectory && (it.name == "alpha" || it.name == "beta" || it.name.contains("-"))
}
)
} finally {
NameMappings.layerNames = previousLayers
NameMappings.moduleNames = previousModules
}
}
}
Loading
Loading