[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.gradle.BaseExtension
import com.android.build.gradle.BasePlugin
import com.android.build.gradle.api.*
import org.gradle.api.InvalidUserCodeException
import org.gradle.api.NamedDomainObjectCollection
import org.gradle.api.Project
@@ -115,7 +114,7 @@ internal class AndroidProjectHandler(
*/
private fun addKotlinDependenciesToAndroidSourceSets(project: Project) {
fun addDependenciesToAndroidSourceSet(
androidSourceSet: AndroidSourceSet,
@Suppress("TYPEALIAS_EXPANSION_DEPRECATION") androidSourceSet: DeprecatedAndroidSourceSet,
apiConfigurationName: String,
implementationConfigurationName: String,
compileOnlyConfigurationName: String,
@@ -159,7 +158,8 @@ internal class AndroidProjectHandler(
task.dependsOn(project.provider {
val androidUnitTestTasks = mutableListOf<Any>()
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:
androidUnitTestTasks.add(project.provider {
project.tasks.matching { it.name == lowerCamelCaseName("test", variant.name) }
@@ -172,7 +172,7 @@ internal class AndroidProjectHandler(
}
private fun preprocessVariant(
variantData: BaseVariant,
@Suppress("TYPEALIAS_EXPANSION_DEPRECATION") variantData: DeprecatedAndroidBaseVariant,
compilation: KotlinJvmAndroidCompilation,
project: Project,
tasksProvider: KotlinTasksProvider
@@ -218,7 +218,7 @@ internal class AndroidProjectHandler(
}
private fun postprocessVariant(
variantData: BaseVariant,
@Suppress("TYPEALIAS_EXPANSION_DEPRECATION") variantData: DeprecatedAndroidBaseVariant,
compilation: KotlinJvmAndroidCompilation,
project: Project,
androidExt: BaseExtension,
@@ -247,7 +247,7 @@ internal class AndroidProjectHandler(
compilation: KotlinJvmAndroidCompilation,
androidPlugin: BasePlugin,
androidExt: BaseExtension,
variantData: BaseVariant,
@Suppress("TYPEALIAS_EXPANSION_DEPRECATION") variantData: DeprecatedAndroidBaseVariant,
javaTask: TaskProvider<out AbstractCompile>,
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>`;
// 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
.find { it.name == "getPackageLibraryProvider" && it.parameterCount == 0 }
@@ -317,11 +323,15 @@ internal class AndroidProjectHandler(
@Suppress("UNCHECKED_CAST")
getPackageLibraryProvider(variant) as TaskProvider<out AbstractArchiveTask>
} 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
compilation.compileDependencyFiles = variant.compileConfiguration.apply {
@@ -362,16 +372,21 @@ internal class AndroidProjectHandler(
}
}
internal fun getTestedVariantData(variantData: BaseVariant): BaseVariant? = when (variantData) {
is TestVariant -> variantData.testedVariant
is UnitTestVariant -> variantData.testedVariant as? BaseVariant
@Suppress("TYPEALIAS_EXPANSION_DEPRECATION")
internal fun getTestedVariantData(
variantData: DeprecatedAndroidBaseVariant
): DeprecatedAndroidBaseVariant? = when (variantData) {
is DeprecatedAndroidTestVariant -> variantData.testedVariant
is DeprecatedAndroidUnitTestVariant -> variantData.testedVariant as? DeprecatedAndroidBaseVariant
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")
internal fun BaseVariant.getJavaTaskProvider(): TaskProvider<out JavaCompile> =
@Suppress("UNCHECKED_CAST", "TYPEALIAS_EXPANSION_DEPRECATION")
internal fun DeprecatedAndroidBaseVariant.getJavaTaskProvider(): TaskProvider<out JavaCompile> =
this::class.java.methods.firstOrNull { it.name == "getJavaCompileProvider" }
?.invoke(this) as? TaskProvider<JavaCompile>
?: @Suppress("DEPRECATION") javaCompile.thisTaskProvider
@@ -390,7 +405,8 @@ class AndroidTestedVariantArtifactsFilter(
private fun initFilteredFiles(): Lazy<Set<File>> {
return lazy {
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
// depends on this module, then there's no artifact with a TestedComponentIdentifier, so consider the artifact of the
// 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
) {
sourceSets
.forEach { provider -> action(project.findKotlinSourceSet(provider) ?: return@forEach) }
) = sourceSets.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
) {
sourceSets
.forEach { androidSourceSet -> action(project.findKotlinSourceSet(androidSourceSet)?.kotlin ?: return@forEach) }
) = sourceSets.forEach { androidSourceSet ->
action(project.findKotlinSourceSet(androidSourceSet)?.kotlin ?: return@forEach)
}
internal inline fun BaseVariant.forEachJavaSourceDir(action: (ConfigurableFileTree) -> Unit) {
getSourceFolders(SourceKind.JAVA).forEach(action)
}
@Suppress("TYPEALIAS_EXPANSION_DEPRECATION")
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 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 DeprecatedAndroidTestedComponentIdentifier = com.android.build.gradle.api.TestedComponentIdentifier