Kapt3: Use annotation processor options from variant data options. This fixes DataBinding on Android Gradle plugin 2.3 (KT-14816)

This commit is contained in:
Yan Zhulanow
2016-12-07 00:29:11 +03:00
committed by Yan Zhulanow
parent 40ef487129
commit d726d0de88
2 changed files with 27 additions and 1 deletions
@@ -27,6 +27,7 @@ import org.gradle.api.tasks.SourceSet
import org.gradle.api.tasks.compile.AbstractCompile
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 java.io.File
@@ -147,7 +148,14 @@ class Kapt3KotlinGradleSubplugin : KotlinGradleSubplugin<KotlinCompile> {
project.extensions.findByName("android") as? BaseExtension
}
for ((key, value) in kaptExtension.getAdditionalArguments(project, variantData, androidPlugin)) {
val androidOptions = if (variantData != null)
AndroidGradleWrapper.getAnnotationProcessorOptionsFromAndroidVariant(variantData) ?: emptyMap()
else
emptyMap()
val apOptions = kaptExtension.getAdditionalArguments(project, variantData, androidPlugin) + androidOptions
for ((key, value) in apOptions) {
pluginOptions += SubpluginOption("apoption", "$key:$value")
}
@@ -94,6 +94,24 @@ class AndroidGradleWrapper {
return extension.productFlavors.iterator().collect { extension.sourceSets.findByName(it.name) }
}
@Nullable
static Map<String, String> getAnnotationProcessorOptionsFromAndroidVariant(@Nullable Object variantData) {
if (!(variantData instanceof BaseVariantData)) {
throw new IllegalArgumentException("BaseVariantData instance expected")
}
def variantConfiguration = variantData.variantConfiguration
if (variantConfiguration.getMetaClass().getMetaMethod("getJavaCompileOptions")) {
def javaCompileOptions = variantConfiguration.getJavaCompileOptions()
if (javaCompileOptions.getMetaClass().getMetaMethod("getAnnotationProcessorOptions")) {
return javaCompileOptions.getAnnotationProcessorOptions().getArguments()
}
}
return null
}
@NotNull
static DefaultDomainObjectSet<TestVariant> getTestVariants(BaseExtension extension) {
if (extension.getMetaClass().getMetaMethod("getTestVariants")) {