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 exists = generators.containsKey(name)
|
||||
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) {
|
||||
java.srcDir(project.codegenDir.resolve("java/$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
|
||||
|
||||
fun finalize(): Generated {
|
||||
fun generate(): Generated {
|
||||
val fin = Generated(ImmutableMap(classes), ImmutableMap(resources))
|
||||
finalized = true
|
||||
return fin
|
||||
|
@ -52,12 +52,16 @@ class ContentGenerator {
|
|||
private val classes: MutableMap<String, String> = 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(name, "class name", classNamePattern)
|
||||
val builder = TypeSpec.classBuilder(ClassName.get(`package`, name))
|
||||
generator.execute(builder)
|
||||
val javaFile: JavaFile = JavaFile.builder(`package`, builder.build())
|
||||
val bld = builder(ClassName.get(`package`, name))
|
||||
generator.execute(bld)
|
||||
val javaFile: JavaFile = JavaFile.builder(`package`, bld.build())
|
||||
.skipJavaLangImports(true)
|
||||
.indent(" ")
|
||||
.addFileComment("Automatically generated through JfCodegen, do not edit!")
|
||||
|
@ -65,11 +69,10 @@ class ContentGenerator {
|
|||
classes["${`package`.replace('.', '/')}/$name.java"] = javaFile.toString()
|
||||
}
|
||||
|
||||
fun text(path: String, generator: Action<StringBuilder>) = ensureMutable {
|
||||
check(path, "path", pathPattern)
|
||||
fun text(path: String, generator: Action<StringBuilder>) = blob(path) {
|
||||
val builder = StringBuilder()
|
||||
generator.execute(builder)
|
||||
resources[path] = builder.toString().toByteArray()
|
||||
builder.toString().toByteArray()
|
||||
}
|
||||
|
||||
fun blob(path: String, generator: Supplier<ByteArray>) = ensureMutable {
|
||||
|
|
Loading…
Reference in New Issue