[Gradle][Minor] Move, deduplicate and rename Project.forEachVariant
KT-54312
This commit is contained in:
committed by
Space Team
parent
4d8fbc1feb
commit
1d397b1c3b
-19
@@ -803,22 +803,3 @@ internal fun ifKaptEnabled(project: Project, block: () -> Unit) {
|
|||||||
private fun SourceSet.clearJavaSrcDirs() {
|
private fun SourceSet.clearJavaSrcDirs() {
|
||||||
java.setSrcDirs(emptyList<File>())
|
java.setSrcDirs(emptyList<File>())
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun Project.forEachVariant(action: (BaseVariant) -> Unit) {
|
|
||||||
val androidExtension = this.extensions.getByName("android")
|
|
||||||
when (androidExtension) {
|
|
||||||
is AppExtension -> androidExtension.applicationVariants.all(action)
|
|
||||||
is LibraryExtension -> {
|
|
||||||
androidExtension.libraryVariants.all(action)
|
|
||||||
if (androidExtension is FeatureExtension) {
|
|
||||||
androidExtension.featureVariants.all(action)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
is TestExtension -> androidExtension.applicationVariants.all(action)
|
|
||||||
}
|
|
||||||
if (androidExtension is TestedExtension) {
|
|
||||||
androidExtension.testVariants.all(action)
|
|
||||||
androidExtension.unitTestVariants.all(action)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
+2
-2
@@ -7,10 +7,10 @@ package org.jetbrains.kotlin.gradle.plugin.sources.android
|
|||||||
|
|
||||||
import org.gradle.api.logging.Logging
|
import org.gradle.api.logging.Logging
|
||||||
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
|
||||||
import org.jetbrains.kotlin.gradle.plugin.forEachVariant
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.android.checker.KotlinAndroidSourceSetLayoutChecker
|
import org.jetbrains.kotlin.gradle.plugin.sources.android.checker.KotlinAndroidSourceSetLayoutChecker
|
||||||
import org.jetbrains.kotlin.gradle.utils.androidExtension
|
import org.jetbrains.kotlin.gradle.utils.androidExtension
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.forAllAndroidVariants
|
||||||
import org.jetbrains.kotlin.gradle.utils.runProjectConfigurationHealthCheck
|
import org.jetbrains.kotlin.gradle.utils.runProjectConfigurationHealthCheck
|
||||||
|
|
||||||
internal object KotlinAndroidSourceSets {
|
internal object KotlinAndroidSourceSets {
|
||||||
@@ -46,7 +46,7 @@ internal object KotlinAndroidSourceSets {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Hook into Android's variant creation: This is invoked in 'afterEvaluate' */
|
/* Hook into Android's variant creation: This is invoked in 'afterEvaluate' */
|
||||||
forEachVariant(target.project) { variant ->
|
target.project.forAllAndroidVariants { variant ->
|
||||||
variant.sourceSets.forEach { sourceProvider ->
|
variant.sourceSets.forEach { sourceProvider ->
|
||||||
val androidSourceSet = android.sourceSets.findByName(sourceProvider.name) ?: return@forEach
|
val androidSourceSet = android.sourceSets.findByName(sourceProvider.name) ?: return@forEach
|
||||||
|
|
||||||
|
|||||||
+4
-25
@@ -41,10 +41,7 @@ import org.jetbrains.kotlin.gradle.tasks.configuration.KotlinCompileConfig
|
|||||||
import org.jetbrains.kotlin.gradle.tasks.thisTaskProvider
|
import org.jetbrains.kotlin.gradle.tasks.thisTaskProvider
|
||||||
import org.jetbrains.kotlin.gradle.testing.internal.kotlinTestRegistry
|
import org.jetbrains.kotlin.gradle.testing.internal.kotlinTestRegistry
|
||||||
import org.jetbrains.kotlin.gradle.tooling.includeKotlinToolingMetadataInApk
|
import org.jetbrains.kotlin.gradle.tooling.includeKotlinToolingMetadataInApk
|
||||||
import org.jetbrains.kotlin.gradle.utils.addExtendsFromRelation
|
import org.jetbrains.kotlin.gradle.utils.*
|
||||||
import org.jetbrains.kotlin.gradle.utils.androidPluginIds
|
|
||||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
|
||||||
import org.jetbrains.kotlin.gradle.utils.newInstance
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.ObjectInputStream
|
import java.io.ObjectInputStream
|
||||||
import java.io.ObjectOutputStream
|
import java.io.ObjectOutputStream
|
||||||
@@ -78,7 +75,7 @@ internal class AndroidProjectHandler(
|
|||||||
"plugins to be applied to the project:\n\t" +
|
"plugins to be applied to the project:\n\t" +
|
||||||
androidPluginIds.joinToString("\n\t") { "* $it" })
|
androidPluginIds.joinToString("\n\t") { "* $it" })
|
||||||
|
|
||||||
project.forEachVariant { variant ->
|
project.forAllAndroidVariants { variant ->
|
||||||
val compilationFactory = KotlinJvmAndroidCompilationFactory(kotlinAndroidTarget, variant)
|
val compilationFactory = KotlinJvmAndroidCompilationFactory(kotlinAndroidTarget, variant)
|
||||||
val variantName = getVariantName(variant)
|
val variantName = getVariantName(variant)
|
||||||
|
|
||||||
@@ -101,7 +98,7 @@ internal class AndroidProjectHandler(
|
|||||||
}
|
}
|
||||||
|
|
||||||
project.whenEvaluated {
|
project.whenEvaluated {
|
||||||
forEachVariant { variant ->
|
forAllAndroidVariants { variant ->
|
||||||
val compilation = kotlinAndroidTarget.compilations.getByName(getVariantName(variant))
|
val compilation = kotlinAndroidTarget.compilations.getByName(getVariantName(variant))
|
||||||
postprocessVariant(variant, compilation, project, ext, plugin)
|
postprocessVariant(variant, compilation, project, ext, plugin)
|
||||||
|
|
||||||
@@ -201,7 +198,7 @@ internal class AndroidProjectHandler(
|
|||||||
project.tasks.matching { it.name == allTestTaskName }.configureEach { task ->
|
project.tasks.matching { it.name == allTestTaskName }.configureEach { task ->
|
||||||
task.dependsOn(project.provider {
|
task.dependsOn(project.provider {
|
||||||
val androidUnitTestTasks = mutableListOf<Any>()
|
val androidUnitTestTasks = mutableListOf<Any>()
|
||||||
forEachVariant(project) { variant ->
|
project.forAllAndroidVariants { variant ->
|
||||||
if (variant is UnitTestVariant) {
|
if (variant is UnitTestVariant) {
|
||||||
// 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 {
|
||||||
@@ -398,24 +395,6 @@ internal fun BaseVariant.getJavaTaskProvider(): TaskProvider<out JavaCompile> =
|
|||||||
?.invoke(this) as? TaskProvider<JavaCompile>
|
?.invoke(this) as? TaskProvider<JavaCompile>
|
||||||
?: @Suppress("DEPRECATION") javaCompile.thisTaskProvider
|
?: @Suppress("DEPRECATION") javaCompile.thisTaskProvider
|
||||||
|
|
||||||
internal fun forEachVariant(project: Project, action: (BaseVariant) -> Unit) {
|
|
||||||
val androidExtension = project.extensions.getByName("android")
|
|
||||||
when (androidExtension) {
|
|
||||||
is AppExtension -> androidExtension.applicationVariants.all(action)
|
|
||||||
is LibraryExtension -> {
|
|
||||||
androidExtension.libraryVariants.all(action)
|
|
||||||
if (androidExtension is FeatureExtension) {
|
|
||||||
androidExtension.featureVariants.all(action)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
is TestExtension -> androidExtension.applicationVariants.all(action)
|
|
||||||
}
|
|
||||||
if (androidExtension is TestedExtension) {
|
|
||||||
androidExtension.testVariants.all(action)
|
|
||||||
androidExtension.unitTestVariants.all(action)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Filter for the AGP test variant classpath artifacts. */
|
/** Filter for the AGP test variant classpath artifacts. */
|
||||||
class AndroidTestedVariantArtifactsFilter(
|
class AndroidTestedVariantArtifactsFilter(
|
||||||
private val artifactCollection: ArtifactCollection,
|
private val artifactCollection: ArtifactCollection,
|
||||||
|
|||||||
+3
-2
@@ -15,6 +15,7 @@ import org.gradle.api.attributes.Attribute
|
|||||||
import org.gradle.api.attributes.Usage.JAVA_RUNTIME_JARS
|
import org.gradle.api.attributes.Usage.JAVA_RUNTIME_JARS
|
||||||
import org.jetbrains.kotlin.gradle.plugin.*
|
import org.jetbrains.kotlin.gradle.plugin.*
|
||||||
import org.jetbrains.kotlin.gradle.utils.dashSeparatedName
|
import org.jetbrains.kotlin.gradle.utils.dashSeparatedName
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.forAllAndroidVariants
|
||||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||||
import org.jetbrains.kotlin.gradle.utils.setProperty
|
import org.jetbrains.kotlin.gradle.utils.setProperty
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
@@ -66,7 +67,7 @@ abstract class KotlinAndroidTarget @Inject constructor(
|
|||||||
private fun checkPublishLibraryVariantsExist() {
|
private fun checkPublishLibraryVariantsExist() {
|
||||||
fun AndroidProjectHandler.getLibraryVariantNames() =
|
fun AndroidProjectHandler.getLibraryVariantNames() =
|
||||||
mutableSetOf<String>().apply {
|
mutableSetOf<String>().apply {
|
||||||
project.forEachVariant {
|
project.forAllAndroidVariants {
|
||||||
if (getLibraryOutputTask(it) != null)
|
if (getLibraryOutputTask(it) != null)
|
||||||
add(getVariantName(it))
|
add(getVariantName(it))
|
||||||
}
|
}
|
||||||
@@ -99,7 +100,7 @@ abstract class KotlinAndroidTarget @Inject constructor(
|
|||||||
private fun AndroidProjectHandler.doCreateComponents(): Set<KotlinTargetComponent> {
|
private fun AndroidProjectHandler.doCreateComponents(): Set<KotlinTargetComponent> {
|
||||||
|
|
||||||
val publishableVariants = mutableListOf<BaseVariant>()
|
val publishableVariants = mutableListOf<BaseVariant>()
|
||||||
.apply { project.forEachVariant { add(it) } }
|
.apply { project.forAllAndroidVariants { add(it) } }
|
||||||
.toList() // Defensive copy against unlikely modification by the lambda that captures the list above in forEachVariant { }
|
.toList() // Defensive copy against unlikely modification by the lambda that captures the list above in forEachVariant { }
|
||||||
.filter { getLibraryOutputTask(it) != null }
|
.filter { getLibraryOutputTask(it) != null }
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -33,7 +33,7 @@ import org.gradle.api.services.BuildService
|
|||||||
import org.gradle.api.services.BuildServiceParameters
|
import org.gradle.api.services.BuildServiceParameters
|
||||||
import org.gradle.api.services.BuildServiceRegistry
|
import org.gradle.api.services.BuildServiceRegistry
|
||||||
import org.gradle.internal.component.model.AttributeConfigurationSelector
|
import org.gradle.internal.component.model.AttributeConfigurationSelector
|
||||||
import org.jetbrains.kotlin.gradle.plugin.forEachVariant
|
import org.jetbrains.kotlin.gradle.utils.forAllAndroidVariants
|
||||||
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.nio.file.Path
|
import java.nio.file.Path
|
||||||
@@ -136,7 +136,7 @@ object AndroidDependencyResolver {
|
|||||||
val sourceSet2Impl = HashMap<String, SourceSetConfigs>()
|
val sourceSet2Impl = HashMap<String, SourceSetConfigs>()
|
||||||
val allImplConfigs = HashSet<Configuration>()
|
val allImplConfigs = HashSet<Configuration>()
|
||||||
|
|
||||||
project.forEachVariant { variant ->
|
project.forAllAndroidVariants { variant ->
|
||||||
val compileConfig = variant.compileConfiguration
|
val compileConfig = variant.compileConfiguration
|
||||||
variant.sourceSets.filterIsInstance(AndroidSourceSet::class.java).map {
|
variant.sourceSets.filterIsInstance(AndroidSourceSet::class.java).map {
|
||||||
val implConfig = project.configurations.getByName(it.implementationConfigurationName)
|
val implConfig = project.configurations.getByName(it.implementationConfigurationName)
|
||||||
|
|||||||
+2
-1
@@ -12,6 +12,7 @@ import org.gradle.api.Project
|
|||||||
import org.gradle.api.provider.Provider
|
import org.gradle.api.provider.Provider
|
||||||
import org.jetbrains.kotlin.gradle.plugin.*
|
import org.jetbrains.kotlin.gradle.plugin.*
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilation
|
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmAndroidCompilation
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.forAllAndroidVariants
|
||||||
|
|
||||||
// Use apply plugin: 'kotlin-parcelize' to enable Android Extensions in an Android project.
|
// Use apply plugin: 'kotlin-parcelize' to enable Android Extensions in an Android project.
|
||||||
class ParcelizeSubplugin : KotlinCompilerPluginSupportPlugin {
|
class ParcelizeSubplugin : KotlinCompilerPluginSupportPlugin {
|
||||||
@@ -23,7 +24,7 @@ class ParcelizeSubplugin : KotlinCompilerPluginSupportPlugin {
|
|||||||
|
|
||||||
val kotlinPluginVersion = target.getKotlinPluginVersion()
|
val kotlinPluginVersion = target.getKotlinPluginVersion()
|
||||||
val dependency = target.dependencies.create("org.jetbrains.kotlin:kotlin-parcelize-runtime:$kotlinPluginVersion")
|
val dependency = target.dependencies.create("org.jetbrains.kotlin:kotlin-parcelize-runtime:$kotlinPluginVersion")
|
||||||
target.forEachVariant {
|
target.forAllAndroidVariants {
|
||||||
it.runtimeConfiguration.dependencies.add(dependency)
|
it.runtimeConfiguration.dependencies.add(dependency)
|
||||||
it.compileConfiguration.dependencies.add(dependency)
|
it.compileConfiguration.dependencies.add(dependency)
|
||||||
}
|
}
|
||||||
|
|||||||
+29
@@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.gradle.utils
|
||||||
|
|
||||||
|
import com.android.build.gradle.*
|
||||||
|
import com.android.build.gradle.api.BaseVariant
|
||||||
|
import org.gradle.api.Project
|
||||||
|
|
||||||
|
internal fun Project.forAllAndroidVariants(action: (BaseVariant) -> Unit) {
|
||||||
|
val androidExtension = this.extensions.getByName("android")
|
||||||
|
when (androidExtension) {
|
||||||
|
is AppExtension -> androidExtension.applicationVariants.all(action)
|
||||||
|
is LibraryExtension -> {
|
||||||
|
androidExtension.libraryVariants.all(action)
|
||||||
|
if (androidExtension is FeatureExtension) {
|
||||||
|
androidExtension.featureVariants.all(action)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
is TestExtension -> androidExtension.applicationVariants.all(action)
|
||||||
|
}
|
||||||
|
if (androidExtension is TestedExtension) {
|
||||||
|
androidExtension.testVariants.all(action)
|
||||||
|
androidExtension.unitTestVariants.all(action)
|
||||||
|
}
|
||||||
|
}
|
||||||
+3
-3
@@ -13,10 +13,10 @@ import com.android.builder.model.SourceProvider
|
|||||||
import org.gradle.api.internal.project.ProjectInternal
|
import org.gradle.api.internal.project.ProjectInternal
|
||||||
import org.gradle.testfixtures.ProjectBuilder
|
import org.gradle.testfixtures.ProjectBuilder
|
||||||
import org.jetbrains.kotlin.gradle.applyMultiplatformPlugin
|
import org.jetbrains.kotlin.gradle.applyMultiplatformPlugin
|
||||||
import org.jetbrains.kotlin.gradle.plugin.forEachVariant
|
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.android.*
|
import org.jetbrains.kotlin.gradle.plugin.sources.android.*
|
||||||
import org.jetbrains.kotlin.gradle.setMultiplatformAndroidSourceSetLayoutVersion
|
import org.jetbrains.kotlin.gradle.setMultiplatformAndroidSourceSetLayoutVersion
|
||||||
import org.jetbrains.kotlin.gradle.utils.androidExtension
|
import org.jetbrains.kotlin.gradle.utils.androidExtension
|
||||||
|
import org.jetbrains.kotlin.gradle.utils.forAllAndroidVariants
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import kotlin.test.assertEquals
|
import kotlin.test.assertEquals
|
||||||
import kotlin.test.assertFalse
|
import kotlin.test.assertFalse
|
||||||
@@ -185,7 +185,7 @@ class MultiplatformAndroidSourceSetLayoutV2Test {
|
|||||||
fun `test - kotlin source directories - are in sync between KotlinSourceSet and AndroidSourceSet`() {
|
fun `test - kotlin source directories - are in sync between KotlinSourceSet and AndroidSourceSet`() {
|
||||||
kotlin.android()
|
kotlin.android()
|
||||||
|
|
||||||
forEachVariant(project) { variant ->
|
project.forAllAndroidVariants { variant ->
|
||||||
variant.sourceSets.forEach { androidSourceSet ->
|
variant.sourceSets.forEach { androidSourceSet ->
|
||||||
androidSourceSet as SourceProvider
|
androidSourceSet as SourceProvider
|
||||||
|
|
||||||
@@ -213,7 +213,7 @@ class MultiplatformAndroidSourceSetLayoutV2Test {
|
|||||||
fun `test - kotlin source directories - supports AGP default location`() {
|
fun `test - kotlin source directories - supports AGP default location`() {
|
||||||
kotlin.android()
|
kotlin.android()
|
||||||
|
|
||||||
forEachVariant(project) { variant ->
|
project.forAllAndroidVariants { variant ->
|
||||||
variant.sourceSets.forEach { androidSourceSet ->
|
variant.sourceSets.forEach { androidSourceSet ->
|
||||||
val kotlinSourceSet = project.getKotlinSourceSetOrFail(androidSourceSet)
|
val kotlinSourceSet = project.getKotlinSourceSetOrFail(androidSourceSet)
|
||||||
assertTrue(
|
assertTrue(
|
||||||
|
|||||||
Reference in New Issue
Block a user