diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3AndroidIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3AndroidIT.kt index 95ba58d0a15..7b8e81d394d 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3AndroidIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/Kapt3AndroidIT.kt @@ -323,6 +323,33 @@ abstract class Kapt3AndroidIT : Kapt3BaseIT() { } } + @Test + fun testStaticDslOptionsPassedToKapt() = with(Project("android-dagger", directoryPrefix = "kapt2")) { + setupWorkingDir() + + gradleBuildScript(subproject = "app").appendText( + """ + + apply plugin: 'kotlin-kapt' + + android { + defaultConfig { + javaCompileOptions { + annotationProcessorOptions { + arguments += ["enable.some.test.option": "true"] + } + } + } + } + """.trimIndent() + ) + + build(":app:kaptDebugKotlin") { + assertSuccessful() + assertContainsRegex(Regex("AP options.*enable\\.some\\.test\\.option=true")) + } + } + private fun setupDataBinding(project: Project) { project.setupWorkingDir() diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt index 7bbfbe1033a..0dc993fd193 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/internal/kapt/Kapt3KotlinGradleSubplugin.kt @@ -365,7 +365,6 @@ class Kapt3GradleSubplugin @Inject internal constructor(private val registry: To private fun Kapt3SubpluginContext.getAPOptions(): Provider = project.provider { val androidVariantData = KaptWithAndroid.androidVariantData(this) - val androidOptions = androidVariantData?.annotationProcessorOptions ?: emptyMap() val annotationProcessorProviders = androidVariantData?.annotationProcessorOptionProviders val subluginOptionsFromProvidedApOptions = lazy { @@ -383,23 +382,25 @@ class Kapt3GradleSubplugin @Inject internal constructor(private val registry: To } } - val nonAndroidOptions = androidOptions.toList().map { SubpluginOption(it.first, it.second) } + getKaptApOptions().get() - CompositeSubpluginOption( "apoptions", - lazy { encodeList((nonAndroidOptions + subluginOptionsFromProvidedApOptions.value).associate { it.key to it.value }) }, - nonAndroidOptions + lazy { encodeList((getDslKaptApOptions().get() + subluginOptionsFromProvidedApOptions.value).associate { it.key to it.value }) }, + getDslKaptApOptions().get() ) } - private fun Kapt3SubpluginContext.getKaptApOptions(): Provider> = project.provider { + /* Returns AP options from static DSL. */ + private fun Kapt3SubpluginContext.getDslKaptApOptions(): Provider> = project.provider { val androidVariantData = KaptWithAndroid.androidVariantData(this) val androidExtension = androidVariantData?.let { project.extensions.findByName("android") as? BaseExtension } - kaptExtension.getAdditionalArguments(project, androidVariantData, androidExtension).toList() + val androidOptions = androidVariantData?.annotationProcessorOptions ?: emptyMap() + val androidSubpluginOptions = androidOptions.toList().map { SubpluginOption(it.first, it.second) } + + androidSubpluginOptions + kaptExtension.getAdditionalArguments(project, androidVariantData, androidExtension).toList() .map { SubpluginOption(it.first, it.second) } + FilesSubpluginOption(KAPT_KOTLIN_GENERATED, listOf(kotlinSourcesOutputDir)) } @@ -609,7 +610,7 @@ class Kapt3GradleSubplugin @Inject internal constructor(private val registry: To it.disableClassloaderCacheForProcessors = project.disableClassloaderCacheForProcessors() } - val subpluginOptions = getKaptApOptions() + val subpluginOptions = getDslKaptApOptions() registerSubpluginOptions(kaptTaskProvider, subpluginOptions) }