Kapt: Support specifying javac options (KT-17245)
This commit is contained in:
committed by
Yan Zhulanow
parent
8cdb08cbfe
commit
3ee65ac499
+2
-1
@@ -124,7 +124,8 @@ class Kapt3IT : BaseGradleIT() {
|
||||
assertKaptSuccessful()
|
||||
assertContains("Options: {suffix=Customized, justColon=:, justEquals==, containsColon=a:b, " +
|
||||
"containsEquals=a=b, startsWithColon=:a, startsWithEquals==a, endsWithColon=a:, " +
|
||||
"endsWithEquals=a:, withSpace=a b c}")
|
||||
"endsWithEquals=a:, withSpace=a b c,")
|
||||
assertContains("-Xmaxerrs=500, -Xlint:all=-Xlint:all") // Javac options test
|
||||
assertFileExists("build/generated/source/kapt/main/example/TestClassCustomized.java")
|
||||
assertFileExists("build/classes/main/example/TestClass.class")
|
||||
assertFileExists("build/classes/main/example/TestClassCustomized.class")
|
||||
|
||||
+5
@@ -33,4 +33,9 @@ kapt {
|
||||
arg("endsWithEquals", "a:")
|
||||
arg("withSpace", "a b c") // key doesn't support spaces
|
||||
}
|
||||
|
||||
javacOptions {
|
||||
option("-Xmaxerrs", 500)
|
||||
option("-Xlint:all")
|
||||
}
|
||||
}
|
||||
+4
-3
@@ -29,7 +29,6 @@ import org.gradle.api.tasks.compile.JavaCompile
|
||||
import org.jetbrains.kotlin.gradle.plugin.*
|
||||
import org.jetbrains.kotlin.gradle.plugin.android.AndroidGradleWrapper
|
||||
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
||||
import org.jetbrains.kotlin.preprocessor.mkdirsOrFail
|
||||
import java.io.ByteArrayOutputStream
|
||||
import java.io.File
|
||||
import java.io.ObjectOutputStream
|
||||
@@ -193,14 +192,16 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin<KotlinCompile> {
|
||||
androidOptions +
|
||||
mapOf("kapt.kotlin.generated" to kotlinSourcesOutputDir.absolutePath)
|
||||
|
||||
pluginOptions += SubpluginOption("apoptions", encodeAnnotationProcessingOptions(apOptions))
|
||||
pluginOptions += SubpluginOption("apoptions", encodeOptions(apOptions))
|
||||
|
||||
pluginOptions += SubpluginOption("javacArguments", encodeOptions(kaptExtension.getJavacOptions()))
|
||||
|
||||
addMiscOptions(pluginOptions)
|
||||
|
||||
return pluginOptions
|
||||
}
|
||||
|
||||
fun encodeAnnotationProcessingOptions(options: Map<String, String>): String {
|
||||
fun encodeOptions(options: Map<String, String>): String {
|
||||
val os = ByteArrayOutputStream()
|
||||
val oos = ObjectOutputStream(os)
|
||||
|
||||
|
||||
+37
-8
@@ -32,18 +32,29 @@ open class KaptExtension {
|
||||
|
||||
open var processors: String = ""
|
||||
|
||||
private var closure: Closure<*>? = null
|
||||
private var apOptionsClosure: Closure<*>? = null
|
||||
private var javacOptionsClosure: Closure<*>? = null
|
||||
|
||||
open fun arguments(closure: Closure<*>) {
|
||||
this.closure = closure
|
||||
this.apOptionsClosure = closure
|
||||
}
|
||||
|
||||
open fun javacOptions(closure: Closure<*>) {
|
||||
this.javacOptionsClosure = closure
|
||||
}
|
||||
|
||||
fun getJavacOptions(): Map<String, String> {
|
||||
val closureToExecute = javacOptionsClosure ?: return emptyMap()
|
||||
val executor = KaptJavacOptionsDelegate().apply { execute(closureToExecute) }
|
||||
return executor.options
|
||||
}
|
||||
|
||||
fun getAdditionalArguments(project: Project, variantData: Any?, androidExtension: Any?): Map<String, String> {
|
||||
val closureToExecute = closure ?: return emptyMap()
|
||||
val closureToExecute = apOptionsClosure ?: return emptyMap()
|
||||
|
||||
val executor = KaptAdditionalArgumentsDelegate(project, variantData, androidExtension)
|
||||
val executor = KaptAnnotationProcessorOptions(project, variantData, androidExtension)
|
||||
executor.execute(closureToExecute)
|
||||
return executor.args
|
||||
return executor.options
|
||||
}
|
||||
|
||||
fun getAdditionalArgumentsForJavac(project: Project, variantData: Any?, androidExtension: Any?): List<String> {
|
||||
@@ -58,16 +69,16 @@ open class KaptExtension {
|
||||
/**
|
||||
* [project], [variant] and [android] properties are intended to be used inside the closure.
|
||||
*/
|
||||
open class KaptAdditionalArgumentsDelegate(
|
||||
open class KaptAnnotationProcessorOptions(
|
||||
@Suppress("unused") open val project: Project,
|
||||
@Suppress("unused") open val variant: Any?,
|
||||
@Suppress("unused") open val android: Any?
|
||||
) {
|
||||
internal val args = LinkedHashMap<String, String>()
|
||||
internal val options = LinkedHashMap<String, String>()
|
||||
|
||||
@Suppress("unused")
|
||||
open fun arg(name: Any, vararg values: Any) {
|
||||
args.put(name.toString(), values.joinToString(" "))
|
||||
options.put(name.toString(), values.joinToString(" "))
|
||||
}
|
||||
|
||||
fun execute(closure: Closure<*>) {
|
||||
@@ -76,4 +87,22 @@ open class KaptAdditionalArgumentsDelegate(
|
||||
closure.call()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
open class KaptJavacOptionsDelegate {
|
||||
internal val options = LinkedHashMap<String, String>()
|
||||
|
||||
open fun option(name: Any, value: Any) {
|
||||
options.put(name.toString(), value.toString())
|
||||
}
|
||||
|
||||
open fun option(name: Any) {
|
||||
options.put(name.toString(), "")
|
||||
}
|
||||
|
||||
fun execute(closure: Closure<*>) {
|
||||
closure.resolveStrategy = Closure.DELEGATE_FIRST
|
||||
closure.delegate = this
|
||||
closure.call()
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user