From 7aed9fd5929464319abea1bc89cec7a0b1baf541 Mon Sep 17 00:00:00 2001 From: Sergey Igushkin Date: Wed, 27 Mar 2019 01:08:04 +0300 Subject: [PATCH] Fix Android AP in Kapt (KT-30632), run Android Kapt IT with AGP 3.3.2 Fixes a bug introduced by the commit 6fa610156e6, which led to Kapt options being imported from Android AP options too early (immediately at creation time for each Android variant, while the Android plugin added the options only afterwards). Move Android subplugin options configuration to the time & scope where it was prior to 6fa610156e6. --- .../jetbrains/kotlin/gradle/Kapt3AndroidIT.kt | 8 ++++++++ .../jetbrains/kotlin/gradle/util/AGPVersion.kt | 1 + .../kapt2/android-databinding/build.gradle | 16 ++++++++++++++++ .../testProject/kapt2/android-realm/build.gradle | 13 +++++++++++++ .../kotlin/gradle/plugin/KotlinPlugin.kt | 8 +++++--- 5 files changed, 43 insertions(+), 3 deletions(-) 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 96e854799a0..561cc39b60c 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 @@ -20,6 +20,14 @@ open class Kapt3Android32IT : Kapt3AndroidIT() { get() = GradleVersionRequired.AtLeast("4.6") } +open class Kapt3Android33IT : Kapt3AndroidIT() { + override val androidGradlePluginVersion: AGPVersion + get() = AGPVersion.v3_3_2 + + override val defaultGradleVersion: GradleVersionRequired + get() = GradleVersionRequired.AtLeast("5.2") +} + class Kapt3Android31IT : Kapt3AndroidIT() { override val androidGradlePluginVersion: AGPVersion get() = AGPVersion.v3_1_0 diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/AGPVersion.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/AGPVersion.kt index 32f948c4718..a5f6e19474e 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/AGPVersion.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/util/AGPVersion.kt @@ -21,5 +21,6 @@ class AGPVersion private constructor(private val versionNumber: VersionNumber) { val v3_0_0 = fromString("3.0.0") val v3_1_0 = fromString("3.1.0") val v3_2_0 = fromString("3.2.0") + val v3_3_2 = fromString("3.3.2") } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/android-databinding/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/android-databinding/build.gradle index 828d450e9b4..b0007f68abc 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/android-databinding/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/android-databinding/build.gradle @@ -1,3 +1,5 @@ +import org.gradle.util.VersionNumber + // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { @@ -21,4 +23,18 @@ allprojects { maven { url 'https://maven.google.com' } jcenter() } + + if (VersionNumber.parse(android_tools_version) >= VersionNumber.parse("3.3.0")) { + // Workaround: the AGP 3.3.2 databinding library depends on these exact versions, and the espresso test library + // transitively brings newer incompatible ones. Force these versions: + configurations.all { + resolutionStrategy { + force 'com.android.support:support-annotations:26.1.0' + force 'com.android.support:support-core-utils:26.1.0' + force 'com.android.support:support-compat:26.1.0' + force 'android.arch.lifecycle:common:1.0.3' + force 'android.arch.core:common:1.0.0' + } + } + } } \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/android-realm/build.gradle b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/android-realm/build.gradle index b2d4ddf7da6..4123e604254 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/android-realm/build.gradle +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/resources/testProject/kapt2/android-realm/build.gradle @@ -41,6 +41,19 @@ android { dexOptions { incremental false } + + packagingOptions { + // Workaround for org.jetbrains.kotlin.gradle.Kapt3Android33IT#testRealm + // Android Plugin 3.3.2 fails with: + // Execution failed for task ':transformResourcesWithMergeJavaResForDebug'. + // com.android.builder.merge.DuplicateRelativeFileException: (these appear one by one if you exclude single files) + // - More than one file was found with OS independent path 'kotlin/reflect/reflect.kotlin_builtins' + // - More than one file was found with OS independent path 'kotlin/coroutines/coroutines.kotlin_builtins' + // - More than one file was found with OS independent path 'kotlin/collections/collections.kotlin_builtins' + // - More than one file was found with OS independent path 'kotlin/internal/internal.kotlin_builtins' + // (maybe more) + exclude '**/*.kotlin_builtins' + } } repositories { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt index b581897b348..462c0e9a1c5 100755 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/plugin/KotlinPlugin.kt @@ -772,12 +772,14 @@ abstract class AbstractAndroidProjectHandler(private val kotlinConfigurationT (kotlinAndroidTarget.compilations as NamedDomainObjectCollection).add(compilation) } - val subpluginEnvironment = SubpluginEnvironment.loadSubplugins(project, kotlinConfigurationTools.kotlinPluginVersion) - val compilation = kotlinAndroidTarget.compilations.getByName(getVariantName(variant)) - applySubplugins(project, compilation, variant, subpluginEnvironment) } project.whenEvaluated { + forEachVariant(project) { variant -> + val subpluginEnvironment = SubpluginEnvironment.loadSubplugins(project, kotlinConfigurationTools.kotlinPluginVersion) + val compilation = kotlinAndroidTarget.compilations.getByName(getVariantName(variant)) + applySubplugins(project, compilation, variant, subpluginEnvironment) + } checkAndroidAnnotationProcessorDependencyUsage(project) } }