32 lines
1.6 KiB
Kotlin
32 lines
1.6 KiB
Kotlin
package io.gitlab.jfronny.scripts.codegen
|
|
|
|
import org.gradle.api.Action
|
|
import java.util.function.Supplier
|
|
|
|
class ContentGenerator : Generator<ContentGenerator.Generated>() {
|
|
private val classes: MutableMap<String, String> = LinkedHashMap()
|
|
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>)
|
|
|
|
fun `class`(`package`: String, name: String, generator: Action<ClassGenerator>) = ensureMutable {
|
|
if (!packagePattern.matches(`package`)) throw IllegalArgumentException("package \"$`package`\" is not a valid package")
|
|
if (!classNamePattern.matches(name)) throw IllegalArgumentException("class name \"$name\" is not a valid class name")
|
|
val builder = ClassGenerator(`package`, name)
|
|
generator.execute(builder)
|
|
classes["${`package`.replace('.', '/')}/$name.java"] = builder.finalize()
|
|
}
|
|
|
|
fun text(path: String, generator: Action<StringBuilder>) = ensureMutable {
|
|
if (!pathPattern.matches(path)) throw IllegalArgumentException("path \"$path\" is not a valid path")
|
|
val builder = StringBuilder()
|
|
generator.execute(builder)
|
|
resources[path] = builder.toString().toByteArray()
|
|
}
|
|
|
|
fun blob(path: String, generator: Supplier<ByteArray>) = ensureMutable {
|
|
if (!pathPattern.matches(path)) throw IllegalArgumentException("path \"$path\" is not a valid path")
|
|
resources[path] = generator.get()
|
|
}
|
|
} |