[Gradle] Suppress usages of Android deprecated types in AndroidProjectHandler

^KT-56904 In Progress
This commit is contained in:
Yahor Berdnikau
2023-12-12 21:08:38 +01:00
committed by Space Team
parent 145876a235
commit 3130775a3b
2 changed files with 50 additions and 29 deletions
@@ -9,7 +9,6 @@ package org.jetbrains.kotlin.gradle.plugin
import com.android.build.api.attributes.BuildTypeAttr import com.android.build.api.attributes.BuildTypeAttr
import com.android.build.gradle.BaseExtension import com.android.build.gradle.BaseExtension
import com.android.build.gradle.BasePlugin import com.android.build.gradle.BasePlugin
import com.android.build.gradle.api.*
import org.gradle.api.InvalidUserCodeException import org.gradle.api.InvalidUserCodeException
import org.gradle.api.NamedDomainObjectCollection import org.gradle.api.NamedDomainObjectCollection
import org.gradle.api.Project import org.gradle.api.Project
@@ -115,7 +114,7 @@ internal class AndroidProjectHandler(
*/ */
private fun addKotlinDependenciesToAndroidSourceSets(project: Project) { private fun addKotlinDependenciesToAndroidSourceSets(project: Project) {
fun addDependenciesToAndroidSourceSet( fun addDependenciesToAndroidSourceSet(
androidSourceSet: AndroidSourceSet, @Suppress("TYPEALIAS_EXPANSION_DEPRECATION") androidSourceSet: DeprecatedAndroidSourceSet,
apiConfigurationName: String, apiConfigurationName: String,
implementationConfigurationName: String, implementationConfigurationName: String,
compileOnlyConfigurationName: String, compileOnlyConfigurationName: String,
@@ -159,7 +158,8 @@ internal class AndroidProjectHandler(
task.dependsOn(project.provider { task.dependsOn(project.provider {
val androidUnitTestTasks = mutableListOf<Any>() val androidUnitTestTasks = mutableListOf<Any>()
project.forAllAndroidVariants { variant -> project.forAllAndroidVariants { variant ->
if (variant is UnitTestVariant) { @Suppress("TYPEALIAS_EXPANSION_DEPRECATION")
if (variant is DeprecatedAndroidUnitTestVariant) {
// There's no API for getting the Android unit test tasks from the variant, so match them by name: // There's no API for getting the Android unit test tasks from the variant, so match them by name:
androidUnitTestTasks.add(project.provider { androidUnitTestTasks.add(project.provider {
project.tasks.matching { it.name == lowerCamelCaseName("test", variant.name) } project.tasks.matching { it.name == lowerCamelCaseName("test", variant.name) }
@@ -172,7 +172,7 @@ internal class AndroidProjectHandler(
} }
private fun preprocessVariant( private fun preprocessVariant(
variantData: BaseVariant, @Suppress("TYPEALIAS_EXPANSION_DEPRECATION") variantData: DeprecatedAndroidBaseVariant,
compilation: KotlinJvmAndroidCompilation, compilation: KotlinJvmAndroidCompilation,
project: Project, project: Project,
tasksProvider: KotlinTasksProvider tasksProvider: KotlinTasksProvider
@@ -218,7 +218,7 @@ internal class AndroidProjectHandler(
} }
private fun postprocessVariant( private fun postprocessVariant(
variantData: BaseVariant, @Suppress("TYPEALIAS_EXPANSION_DEPRECATION") variantData: DeprecatedAndroidBaseVariant,
compilation: KotlinJvmAndroidCompilation, compilation: KotlinJvmAndroidCompilation,
project: Project, project: Project,
androidExt: BaseExtension, androidExt: BaseExtension,
@@ -247,7 +247,7 @@ internal class AndroidProjectHandler(
compilation: KotlinJvmAndroidCompilation, compilation: KotlinJvmAndroidCompilation,
androidPlugin: BasePlugin, androidPlugin: BasePlugin,
androidExt: BaseExtension, androidExt: BaseExtension,
variantData: BaseVariant, @Suppress("TYPEALIAS_EXPANSION_DEPRECATION") variantData: DeprecatedAndroidBaseVariant,
javaTask: TaskProvider<out AbstractCompile>, javaTask: TaskProvider<out AbstractCompile>,
kotlinTask: TaskProvider<out KotlinCompile> kotlinTask: TaskProvider<out KotlinCompile>
) { ) {
@@ -303,13 +303,19 @@ internal class AndroidProjectHandler(
) )
} }
fun getFlavorNames(variant: BaseVariant): List<String> = variant.productFlavors.map { it.name } fun getFlavorNames(
@Suppress("TYPEALIAS_EXPANSION_DEPRECATION") variant: DeprecatedAndroidBaseVariant
): List<String> = variant.productFlavors.map { it.name }
fun getBuildTypeName(variant: BaseVariant): String = variant.buildType.name fun getBuildTypeName(
@Suppress("TYPEALIAS_EXPANSION_DEPRECATION") variant: DeprecatedAndroidBaseVariant
): String = variant.buildType.name
// TODO the return type is actually `AbstractArchiveTask | TaskProvider<out AbstractArchiveTask>`; // TODO the return type is actually `AbstractArchiveTask | TaskProvider<out AbstractArchiveTask>`;
// change the signature once the Android Gradle plugin versions that don't support task providers are dropped // change the signature once the Android Gradle plugin versions that don't support task providers are dropped
fun getLibraryOutputTask(variant: BaseVariant): Any? { fun getLibraryOutputTask(
@Suppress("TYPEALIAS_EXPANSION_DEPRECATION") variant: DeprecatedAndroidBaseVariant
): Any? {
val getPackageLibraryProvider = variant.javaClass.methods val getPackageLibraryProvider = variant.javaClass.methods
.find { it.name == "getPackageLibraryProvider" && it.parameterCount == 0 } .find { it.name == "getPackageLibraryProvider" && it.parameterCount == 0 }
@@ -317,11 +323,15 @@ internal class AndroidProjectHandler(
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
getPackageLibraryProvider(variant) as TaskProvider<out AbstractArchiveTask> getPackageLibraryProvider(variant) as TaskProvider<out AbstractArchiveTask>
} else { } else {
(variant as? LibraryVariant)?.packageLibrary @Suppress("TYPEALIAS_EXPANSION_DEPRECATION")
(variant as? DeprecatedAndroidLibraryVariant)?.packageLibrary
} }
} }
fun setUpDependencyResolution(variant: BaseVariant, compilation: KotlinJvmAndroidCompilation) { fun setUpDependencyResolution(
@Suppress("TYPEALIAS_EXPANSION_DEPRECATION") variant: DeprecatedAndroidBaseVariant,
compilation: KotlinJvmAndroidCompilation
) {
val project = compilation.target.project val project = compilation.target.project
compilation.compileDependencyFiles = variant.compileConfiguration.apply { compilation.compileDependencyFiles = variant.compileConfiguration.apply {
@@ -362,16 +372,21 @@ internal class AndroidProjectHandler(
} }
} }
internal fun getTestedVariantData(variantData: BaseVariant): BaseVariant? = when (variantData) { @Suppress("TYPEALIAS_EXPANSION_DEPRECATION")
is TestVariant -> variantData.testedVariant internal fun getTestedVariantData(
is UnitTestVariant -> variantData.testedVariant as? BaseVariant variantData: DeprecatedAndroidBaseVariant
): DeprecatedAndroidBaseVariant? = when (variantData) {
is DeprecatedAndroidTestVariant -> variantData.testedVariant
is DeprecatedAndroidUnitTestVariant -> variantData.testedVariant as? DeprecatedAndroidBaseVariant
else -> null else -> null
} }
internal fun getVariantName(variant: BaseVariant): String = variant.name internal fun getVariantName(
@Suppress("TYPEALIAS_EXPANSION_DEPRECATION") variant: DeprecatedAndroidBaseVariant
): String = variant.name
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST", "TYPEALIAS_EXPANSION_DEPRECATION")
internal fun BaseVariant.getJavaTaskProvider(): TaskProvider<out JavaCompile> = internal fun DeprecatedAndroidBaseVariant.getJavaTaskProvider(): TaskProvider<out JavaCompile> =
this::class.java.methods.firstOrNull { it.name == "getJavaCompileProvider" } this::class.java.methods.firstOrNull { it.name == "getJavaCompileProvider" }
?.invoke(this) as? TaskProvider<JavaCompile> ?.invoke(this) as? TaskProvider<JavaCompile>
?: @Suppress("DEPRECATION") javaCompile.thisTaskProvider ?: @Suppress("DEPRECATION") javaCompile.thisTaskProvider
@@ -390,7 +405,8 @@ class AndroidTestedVariantArtifactsFilter(
private fun initFilteredFiles(): Lazy<Set<File>> { private fun initFilteredFiles(): Lazy<Set<File>> {
return lazy { return lazy {
artifactCollection.filter { artifactCollection.filter {
it.id.componentIdentifier is TestedComponentIdentifier || @Suppress("TYPEALIAS_EXPANSION_DEPRECATION")
it.id.componentIdentifier is DeprecatedAndroidTestedComponentIdentifier ||
// If tests depend on the main classes transitively, through a test dependency on another module which // If tests depend on the main classes transitively, through a test dependency on another module which
// depends on this module, then there's no artifact with a TestedComponentIdentifier, so consider the artifact of the // depends on this module, then there's no artifact with a TestedComponentIdentifier, so consider the artifact of the
// current module a friend path, too: // current module a friend path, too:
@@ -415,21 +431,22 @@ class AndroidTestedVariantArtifactsFilter(
} }
} }
internal inline fun BaseVariant.forEachKotlinSourceSet( @Suppress("TYPEALIAS_EXPANSION_DEPRECATION")
internal inline fun DeprecatedAndroidBaseVariant.forEachKotlinSourceSet(
project: Project, action: (KotlinSourceSet) -> Unit project: Project, action: (KotlinSourceSet) -> Unit
) { ) = sourceSets.forEach { provider ->
sourceSets action(project.findKotlinSourceSet(provider) ?: return@forEach)
.forEach { provider -> action(project.findKotlinSourceSet(provider) ?: return@forEach) }
} }
internal inline fun BaseVariant.forEachKotlinSourceDirectorySet( @Suppress("TYPEALIAS_EXPANSION_DEPRECATION")
internal inline fun DeprecatedAndroidBaseVariant.forEachKotlinSourceDirectorySet(
project: Project, action: (SourceDirectorySet) -> Unit project: Project, action: (SourceDirectorySet) -> Unit
) { ) = sourceSets.forEach { androidSourceSet ->
sourceSets action(project.findKotlinSourceSet(androidSourceSet)?.kotlin ?: return@forEach)
.forEach { androidSourceSet -> action(project.findKotlinSourceSet(androidSourceSet)?.kotlin ?: return@forEach) }
} }
internal inline fun BaseVariant.forEachJavaSourceDir(action: (ConfigurableFileTree) -> Unit) { @Suppress("TYPEALIAS_EXPANSION_DEPRECATION")
getSourceFolders(SourceKind.JAVA).forEach(action) internal inline fun DeprecatedAndroidBaseVariant.forEachJavaSourceDir(
} action: (ConfigurableFileTree) -> Unit
) = getSourceFolders(DeprecatedAndroidSourceKind.JAVA).forEach(action)
@@ -9,4 +9,8 @@ package org.jetbrains.kotlin.gradle.utils
internal typealias DeprecatedAndroidSourceSet = com.android.build.gradle.api.AndroidSourceSet internal typealias DeprecatedAndroidSourceSet = com.android.build.gradle.api.AndroidSourceSet
internal typealias DeprecatedAndroidBaseVariant = com.android.build.gradle.api.BaseVariant internal typealias DeprecatedAndroidBaseVariant = com.android.build.gradle.api.BaseVariant
internal typealias DeprecatedAndroidLibraryVariant = com.android.build.gradle.api.LibraryVariant
internal typealias DeprecatedAndroidTestVariant = com.android.build.gradle.api.TestVariant
internal typealias DeprecatedAndroidUnitTestVariant = com.android.build.gradle.api.UnitTestVariant
internal typealias DeprecatedAndroidSourceKind = com.android.build.gradle.api.SourceKind internal typealias DeprecatedAndroidSourceKind = com.android.build.gradle.api.SourceKind
internal typealias DeprecatedAndroidTestedComponentIdentifier = com.android.build.gradle.api.TestedComponentIdentifier