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
This commit is contained in:
Sergey Igushkin
2019-05-20 15:34:55 +03:00
parent 0a3ebb5780
commit 71bd88bdb3
4 changed files with 38 additions and 12 deletions
@@ -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(
@@ -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<V>(private val kotlinConfigurationT
abstract fun getVariantName(variant: V): String
abstract fun getFlavorNames(variant: V): List<String>
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<SourceProvider>
protected abstract fun getAllJavaSources(variantData: V): Iterable<File>
@@ -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<out AbstractArchiveTask>`;
// 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<out AbstractArchiveTask>
} else {
(variant as? LibraryVariant)?.packageLibrary
}
}
override fun setUpDependencyResolution(variant: BaseVariant, compilation: KotlinJvmAndroidCompilation) {
val project = compilation.target.project
@@ -170,14 +170,14 @@ open class KotlinAndroidTarget(
artifactClassifier: String?
): Set<DefaultKotlinUsageContext> {
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
}
}