From 71bd88bdb3faebb266c58c9b99669bd91175fb72 Mon Sep 17 00:00:00 2001 From: Sergey Igushkin Date: Mon, 20 May 2019 15:34:55 +0300 Subject: [PATCH] Fix the AGP deprecation warning on usage of getPackageLibrary, KT-30784 Use the new API that returns the task provider, if available. Issue #KT-30784 Fixed --- .../AbstractKotlinAndroidGradleTests.kt | 25 +++++++++++++++---- .../kotlin/gradle/plugin/KotlinPlugin.kt | 4 +-- .../android/Android25ProjectHandler.kt | 17 +++++++++++-- .../targets/android/KotlinAndroidTarget.kt | 4 +-- 4 files changed, 38 insertions(+), 12 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/AbstractKotlinAndroidGradleTests.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/AbstractKotlinAndroidGradleTests.kt index 687c5448c50..f38f440f2fb 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/AbstractKotlinAndroidGradleTests.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/AbstractKotlinAndroidGradleTests.kt @@ -11,8 +11,15 @@ import java.io.File import kotlin.test.assertEquals import kotlin.test.assertTrue -// TODO If we there is a way to fetch the latest Android plugin version, test against the latest version -class KotlinAndroid32GradleIT : KotlinAndroid3GradleIT(androidGradlePluginVersion = AGPVersion.v3_2_0) { +open class KotlinAndroid33GradleIT : KotlinAndroid32GradleIT() { + override val androidGradlePluginVersion: AGPVersion + get() = AGPVersion.v3_3_2 +} + +open class KotlinAndroid32GradleIT : KotlinAndroid3GradleIT() { + override val androidGradlePluginVersion: AGPVersion + get() = AGPVersion.v3_2_0 + override val defaultGradleVersion: GradleVersionRequired get() = GradleVersionRequired.AtLeast("4.6") @@ -21,6 +28,9 @@ class KotlinAndroid32GradleIT : KotlinAndroid3GradleIT(androidGradlePluginVersio build("assemble", "compileDebugUnitTestJavaWithJavac", "printCompilerPluginOptions") { assertSuccessful() + // KT-30784 + assertNotContains("API 'variant.getPackageLibrary()' is obsolete and has been replaced") + assertContains("KT-29964 OK") // Output from lib/build.gradle assertTasksExecuted( @@ -327,12 +337,15 @@ class KotlinAndroid32GradleIT : KotlinAndroid3GradleIT(androidGradlePluginVersio } } -class KotlinAndroid30GradleIT : KotlinAndroid3GradleIT(androidGradlePluginVersion = AGPVersion.v3_0_0) { +class KotlinAndroid30GradleIT : KotlinAndroid3GradleIT() { + override val androidGradlePluginVersion: AGPVersion + get() = AGPVersion.v3_0_0 + override val defaultGradleVersion: GradleVersionRequired get() = GradleVersionRequired.Until("4.10.2") } -abstract class KotlinAndroid3GradleIT(androidGradlePluginVersion: AGPVersion) : AbstractKotlinAndroidGradleTests(androidGradlePluginVersion) { +abstract class KotlinAndroid3GradleIT : AbstractKotlinAndroidGradleTests() { @Test fun testApplyWithFeaturePlugin() { val project = Project("AndroidProject") @@ -361,7 +374,9 @@ abstract class KotlinAndroid3GradleIT(androidGradlePluginVersion: AGPVersion) : } } -abstract class AbstractKotlinAndroidGradleTests(val androidGradlePluginVersion: AGPVersion) : BaseGradleIT() { +abstract class AbstractKotlinAndroidGradleTests : BaseGradleIT() { + + abstract val androidGradlePluginVersion: AGPVersion override fun defaultBuildOptions() = super.defaultBuildOptions().copy( 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 ec1011925b4..80057558dfb 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 @@ -2,7 +2,6 @@ package org.jetbrains.kotlin.gradle.plugin import com.android.build.gradle.BaseExtension import com.android.build.gradle.BasePlugin -import com.android.build.gradle.api.AndroidSourceSet import com.android.build.gradle.api.BaseVariant import com.android.builder.model.SourceProvider import groovy.lang.Closure @@ -26,7 +25,6 @@ import org.gradle.api.tasks.CompileClasspathNormalizer import org.gradle.api.tasks.Delete import org.gradle.api.tasks.SourceSet import org.gradle.api.tasks.Upload -import org.gradle.api.tasks.bundling.AbstractArchiveTask import org.gradle.api.tasks.compile.AbstractCompile import org.gradle.api.tasks.compile.JavaCompile import org.gradle.jvm.tasks.Jar @@ -698,7 +696,7 @@ abstract class AbstractAndroidProjectHandler(private val kotlinConfigurationT abstract fun getVariantName(variant: V): String abstract fun getFlavorNames(variant: V): List abstract fun getBuildTypeName(variant: V): String - abstract fun getLibraryOutputTask(variant: V): AbstractArchiveTask? + abstract fun getLibraryOutputTask(variant: V): Any? protected abstract fun getSourceProviders(variantData: V): Iterable protected abstract fun getAllJavaSources(variantData: V): Iterable diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/Android25ProjectHandler.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/Android25ProjectHandler.kt index 3bf00d801f2..36bdcf3fbdd 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/Android25ProjectHandler.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/Android25ProjectHandler.kt @@ -12,6 +12,7 @@ import com.android.build.gradle.tasks.MergeResources import com.android.builder.model.SourceProvider import org.gradle.api.Project import org.gradle.api.file.FileCollection +import org.gradle.api.tasks.TaskProvider import org.gradle.api.tasks.bundling.AbstractArchiveTask import org.gradle.api.tasks.compile.AbstractCompile import org.jetbrains.kotlin.gradle.internal.Kapt3GradleSubplugin @@ -21,6 +22,7 @@ import org.jetbrains.kotlin.gradle.plugin.android.AndroidGradleWrapper import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilation import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jetbrains.kotlin.gradle.utils.addExtendsFromRelation +import org.jetbrains.kotlin.gradle.utils.isGradleVersionAtLeast import java.io.File import java.util.concurrent.Callable @@ -126,8 +128,19 @@ class Android25ProjectHandler( return project.files(Callable { variantData.mergeResources?.computeResourceSetList0() ?: emptyList() }) } - override fun getLibraryOutputTask(variant: BaseVariant): AbstractArchiveTask? = - (variant as? LibraryVariant)?.packageLibrary + // TODO the return type is actually `AbstractArchiveTask | TaskProvider`; + // change the signature once the Gradle versions that don't support task providers (< 4.8) are dropped + override fun getLibraryOutputTask(variant: BaseVariant): Any? { + val getPackageLibraryProvider = variant.javaClass.methods + .find { it.name == "getPackageLibraryProvider" && it.parameterCount == 0 } + + return if (getPackageLibraryProvider != null && isGradleVersionAtLeast(4, 8)) { + @Suppress("UNCHECKED_CAST") + getPackageLibraryProvider(variant) as TaskProvider + } else { + (variant as? LibraryVariant)?.packageLibrary + } + } override fun setUpDependencyResolution(variant: BaseVariant, compilation: KotlinJvmAndroidCompilation) { val project = compilation.target.project diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/KotlinAndroidTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/KotlinAndroidTarget.kt index 8425fa2c955..1212715a71a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/KotlinAndroidTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/targets/android/KotlinAndroidTarget.kt @@ -170,14 +170,14 @@ open class KotlinAndroidTarget( artifactClassifier: String? ): Set { val variantName = getVariantName(variant) - val outputTask = getLibraryOutputTask(variant) ?: return emptySet() + val outputTaskOrProvider = getLibraryOutputTask(variant) ?: return emptySet() val artifact = run { val archivesConfigurationName = lowerCamelCaseName(targetName, variantName, "archives") project.configurations.maybeCreate(archivesConfigurationName).apply { isCanBeConsumed = false isCanBeResolved = false } - project.artifacts.add(archivesConfigurationName, outputTask) { artifact -> + project.artifacts.add(archivesConfigurationName, outputTaskOrProvider) { artifact -> artifact.classifier = artifactClassifier } }