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>) {
|
fun SourceSet.generate(project: Project, generate: Action<ContentGenerator>) {
|
||||||
val generators = project.extra["codeGenerators"] as LinkedHashMap<String, ContentGenerator.Generated>
|
val generators = project.extra["codeGenerators"] as LinkedHashMap<String, ContentGenerator.Generated>
|
||||||
|
val exists = generators.containsKey(name)
|
||||||
val generator = ContentGenerator()
|
val generator = ContentGenerator()
|
||||||
generate.execute(generator)
|
generate.execute(generator)
|
||||||
generators[name] = generator.finalize()
|
generators[name] = if (exists) generators[name]!!.merge(generator.finalize()) else generator.finalize()
|
||||||
java.srcDir(project.codegenDir.resolve("java/$name"))
|
if (!exists) {
|
||||||
resources.srcDir(project.codegenDir.resolve("resources/$name"))
|
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()
|
private val resources: MutableMap<String, ByteArray> = LinkedHashMap()
|
||||||
|
|
||||||
override fun generateFinalized() = Generated(ImmutableMap(classes), ImmutableMap(resources))
|
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 {
|
fun `class`(`package`: String, name: String, generator: Action<ClassGenerator>) = ensureMutable {
|
||||||
if (!packagePattern.matches(`package`)) throw IllegalArgumentException("package \"$`package`\" is not a valid package")
|
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 {
|
val jfCodegen by tasks.registering {
|
||||||
doLast {
|
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) ->
|
generated.classes.forEach { (filePath, content) ->
|
||||||
val path = codegenDir.resolve("java").resolve(name).resolve(filePath)
|
val path = codegenDir.resolve("java").resolve(name).resolve(filePath)
|
||||||
path.parentFile.mkdirs()
|
path.parentFile.mkdirs()
|
||||||
|
|
Loading…
Reference in New Issue