Support for generating enums and interfaces
This commit is contained in:
parent
4d2195ee08
commit
c8a938eab8
|
@ -22,7 +22,7 @@ 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 exists = generators.containsKey(name)
|
||||||
val generator = ContentGenerator().runAction(generate)
|
val generator = ContentGenerator().runAction(generate)
|
||||||
generators[name] = if (exists) generators[name]!!.merge(generator.finalize()) else generator.finalize()
|
generators[name] = if (exists) generators[name]!!.merge(generator.generate()) else generator.generate()
|
||||||
if (!exists) {
|
if (!exists) {
|
||||||
java.srcDir(project.codegenDir.resolve("java/$name"))
|
java.srcDir(project.codegenDir.resolve("java/$name"))
|
||||||
resources.srcDir(project.codegenDir.resolve("resources/$name"))
|
resources.srcDir(project.codegenDir.resolve("resources/$name"))
|
||||||
|
@ -38,7 +38,7 @@ class ContentGenerator {
|
||||||
|
|
||||||
private data class ImmutableMap<Key, Value>(private val inner: Map<Key, Value>): Map<Key, Value> by inner
|
private data class ImmutableMap<Key, Value>(private val inner: Map<Key, Value>): Map<Key, Value> by inner
|
||||||
|
|
||||||
fun finalize(): Generated {
|
fun generate(): Generated {
|
||||||
val fin = Generated(ImmutableMap(classes), ImmutableMap(resources))
|
val fin = Generated(ImmutableMap(classes), ImmutableMap(resources))
|
||||||
finalized = true
|
finalized = true
|
||||||
return fin
|
return fin
|
||||||
|
@ -52,12 +52,16 @@ class ContentGenerator {
|
||||||
private val classes: MutableMap<String, String> = LinkedHashMap()
|
private val classes: MutableMap<String, String> = LinkedHashMap()
|
||||||
private val resources: MutableMap<String, ByteArray> = LinkedHashMap()
|
private val resources: MutableMap<String, ByteArray> = LinkedHashMap()
|
||||||
|
|
||||||
fun `class`(`package`: String, name: String, generator: Action<TypeSpec.Builder>) = ensureMutable {
|
fun `class`(`package`: String, name: String, generator: Action<TypeSpec.Builder>) = `class`(`package`, name, TypeSpec::classBuilder, generator)
|
||||||
|
fun `enum`(`package`: String, name: String, generator: Action<TypeSpec.Builder>) = `class`(`package`, name, TypeSpec::enumBuilder, generator)
|
||||||
|
fun `interface`(`package`: String, name: String, generator: Action<TypeSpec.Builder>) = `class`(`package`, name, TypeSpec::interfaceBuilder, generator)
|
||||||
|
|
||||||
|
private fun `class`(`package`: String, name: String, builder: (ClassName) -> TypeSpec.Builder, generator: Action<TypeSpec.Builder>) = ensureMutable {
|
||||||
check(`package`, "package", packagePattern)
|
check(`package`, "package", packagePattern)
|
||||||
check(name, "class name", classNamePattern)
|
check(name, "class name", classNamePattern)
|
||||||
val builder = TypeSpec.classBuilder(ClassName.get(`package`, name))
|
val bld = builder(ClassName.get(`package`, name))
|
||||||
generator.execute(builder)
|
generator.execute(bld)
|
||||||
val javaFile: JavaFile = JavaFile.builder(`package`, builder.build())
|
val javaFile: JavaFile = JavaFile.builder(`package`, bld.build())
|
||||||
.skipJavaLangImports(true)
|
.skipJavaLangImports(true)
|
||||||
.indent(" ")
|
.indent(" ")
|
||||||
.addFileComment("Automatically generated through JfCodegen, do not edit!")
|
.addFileComment("Automatically generated through JfCodegen, do not edit!")
|
||||||
|
@ -65,11 +69,10 @@ class ContentGenerator {
|
||||||
classes["${`package`.replace('.', '/')}/$name.java"] = javaFile.toString()
|
classes["${`package`.replace('.', '/')}/$name.java"] = javaFile.toString()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun text(path: String, generator: Action<StringBuilder>) = ensureMutable {
|
fun text(path: String, generator: Action<StringBuilder>) = blob(path) {
|
||||||
check(path, "path", pathPattern)
|
|
||||||
val builder = StringBuilder()
|
val builder = StringBuilder()
|
||||||
generator.execute(builder)
|
generator.execute(builder)
|
||||||
resources[path] = builder.toString().toByteArray()
|
builder.toString().toByteArray()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun blob(path: String, generator: Supplier<ByteArray>) = ensureMutable {
|
fun blob(path: String, generator: Supplier<ByteArray>) = ensureMutable {
|
||||||
|
|
Loading…
Reference in New Issue