Improve kapt arguments & javac options usability with Kotlin DSL

Issue #KT-21596 Fixed
This commit is contained in:
Sergey Igushkin
2017-12-20 20:49:30 +03:00
parent 411feab9ae
commit 710c726c9a
2 changed files with 37 additions and 23 deletions
@@ -30,6 +30,8 @@ kapt {
arg("containsColon", "a:b")
arg("containsEquals", "a=b")
arg("startsWithColon", ":a")
}
arguments {
arg("startsWithEquals", "=a")
arg("endsWithColon", "a:")
arg("endsWithEquals", "a:")
@@ -38,6 +40,8 @@ kapt {
javacOptions {
option("-Xmaxerrs", 500)
}
javacOptions {
option("-Xlint:all")
}
}
@@ -32,29 +32,42 @@ open class KaptExtension {
open var processors: String = ""
private var apOptionsClosure: Closure<*>? = null
private var javacOptionsClosure: Closure<*>? = null
private val apOptionsActions =
mutableListOf<(KaptAnnotationProcessorOptions) -> Unit>()
private val javacOptionsActions =
mutableListOf<(KaptJavacOptionsDelegate) -> Unit>()
open fun arguments(closure: Closure<*>) {
this.apOptionsClosure = closure
apOptionsActions += { apOptions ->
apOptions.execute(closure)
}
}
open fun arguments(action: KaptAnnotationProcessorOptions.() -> Unit) {
apOptionsActions += action
}
open fun javacOptions(closure: Closure<*>) {
this.javacOptionsClosure = closure
this.javacOptionsActions += { javacOptions ->
javacOptions.execute(closure)
}
}
open fun javacOptions(action: KaptJavacOptionsDelegate.() -> Unit) {
javacOptionsActions += action
}
fun getJavacOptions(): Map<String, String> {
val closureToExecute = javacOptionsClosure ?: return emptyMap()
val executor = KaptJavacOptionsDelegate().apply { execute(closureToExecute) }
return executor.options
val result = KaptJavacOptionsDelegate()
javacOptionsActions.forEach { it(result) }
return result.options
}
fun getAdditionalArguments(project: Project, variantData: Any?, androidExtension: Any?): Map<String, String> {
val closureToExecute = apOptionsClosure ?: return emptyMap()
val executor = KaptAnnotationProcessorOptions(project, variantData, androidExtension)
executor.execute(closureToExecute)
return executor.options
val result = KaptAnnotationProcessorOptions(project, variantData, androidExtension)
apOptionsActions.forEach { it(result) }
return result.options
}
fun getAdditionalArgumentsForJavac(project: Project, variantData: Any?, androidExtension: Any?): List<String> {
@@ -81,12 +94,7 @@ open class KaptAnnotationProcessorOptions(
options.put(name.toString(), values.joinToString(" "))
}
fun execute(closure: Closure<*>) {
closure.resolveStrategy = Closure.DELEGATE_FIRST
closure.delegate = this
closure.call()
}
fun execute(closure: Closure<*>) = executeClosure(closure)
}
open class KaptJavacOptionsDelegate {
@@ -100,9 +108,11 @@ open class KaptJavacOptionsDelegate {
options.put(name.toString(), "")
}
fun execute(closure: Closure<*>) {
closure.resolveStrategy = Closure.DELEGATE_FIRST
closure.delegate = this
closure.call()
}
fun execute(closure: Closure<*>) = executeClosure(closure)
}
private fun Any?.executeClosure(closure: Closure<*>) {
closure.resolveStrategy = Closure.DELEGATE_FIRST
closure.delegate = this
closure.call()
}