Scripts/convention/src/main/kotlin/io/gitlab/jfronny/scripts/CodegenExt.kt

21 lines
876 B
Kotlin

package io.gitlab.jfronny.scripts
import io.gitlab.jfronny.scripts.codegen.ContentGenerator
import org.gradle.api.Action
import org.gradle.api.Project
import org.gradle.api.tasks.SourceSet
import org.gradle.kotlin.dsl.extra
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] = 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"))
}
}