codegen: enhance edge cases
This commit is contained in:
parent
2477a799db
commit
13c83d85c6
|
@ -10,9 +10,12 @@ val Project.codegenDir get() = buildDir.resolve("generated/sources/jfCodegen")
|
|||
|
||||
fun SourceSet.generate(project: Project, generate: Action<ContentGenerator>) {
|
||||
val generators = project.extra["codeGenerators"] as LinkedHashMap<String, ContentGenerator.Generated>
|
||||
val exists = generators.containsKey(name)
|
||||
val generator = ContentGenerator()
|
||||
generate.execute(generator)
|
||||
generators[name] = generator.finalize()
|
||||
java.srcDir(project.codegenDir.resolve("java/$name"))
|
||||
resources.srcDir(project.codegenDir.resolve("resources/$name"))
|
||||
generators[name] = if (exists) generators[name]!!.merge(generator.finalize()) else generator.finalize()
|
||||
if (!exists) {
|
||||
java.srcDir(project.codegenDir.resolve("java/$name"))
|
||||
resources.srcDir(project.codegenDir.resolve("resources/$name"))
|
||||
}
|
||||
}
|
|
@ -8,7 +8,9 @@ class ContentGenerator : Generator<ContentGenerator.Generated>() {
|
|||
private val resources: MutableMap<String, ByteArray> = LinkedHashMap()
|
||||
|
||||
override fun generateFinalized() = Generated(ImmutableMap(classes), ImmutableMap(resources))
|
||||
data class Generated(val classes: Map<String, String>, val resources: Map<String, ByteArray>)
|
||||
data class Generated(val classes: Map<String, String>, val resources: Map<String, ByteArray>) {
|
||||
fun merge(other: Generated): Generated = Generated(classes + other.classes, resources + other.resources)
|
||||
}
|
||||
|
||||
fun `class`(`package`: String, name: String, generator: Action<ClassGenerator>) = ensureMutable {
|
||||
if (!packagePattern.matches(`package`)) throw IllegalArgumentException("package \"$`package`\" is not a valid package")
|
||||
|
|
|
@ -10,7 +10,9 @@ extra["codeGenerators"] = LinkedHashMap<String, Generated>()
|
|||
|
||||
val jfCodegen by tasks.registering {
|
||||
doLast {
|
||||
(project.extra["codeGenerators"] as LinkedHashMap<String, Generated>).forEach { (name, generated) ->
|
||||
val generators = project.extra["codeGenerators"] as LinkedHashMap<String, Generated>
|
||||
if (codegenDir.exists()) codegenDir.deleteRecursively()
|
||||
generators.forEach { (name, generated) ->
|
||||
generated.classes.forEach { (filePath, content) ->
|
||||
val path = codegenDir.resolve("java").resolve(name).resolve(filePath)
|
||||
path.parentFile.mkdirs()
|
||||
|
|
Loading…
Reference in New Issue