[Gradle] Move KotlinTargetHierarchy/Android configuration from KotlinAndroidTarget to KotlniTargetHierarchyDsl

^KT-58209 Verification Pending
This commit is contained in:
Sebastian Sellmair
2023-04-24 17:53:00 +02:00
committed by Space Team
parent bc1abb2e6a
commit bd0f54564d
8 changed files with 127 additions and 95 deletions
@@ -142,6 +142,16 @@ public abstract interface class org/jetbrains/kotlin/gradle/dsl/KaptJavacOption
public abstract fun option (Ljava/lang/Object;Ljava/lang/Object;)V public abstract fun option (Ljava/lang/Object;Ljava/lang/Object;)V
} }
public abstract interface class org/jetbrains/kotlin/gradle/dsl/KotlinAndroidTargetHierarchyDsl {
public abstract fun getInstrumentedTest ()Lorg/jetbrains/kotlin/gradle/dsl/KotlinAndroidVariantHierarchyDsl;
public abstract fun getMain ()Lorg/jetbrains/kotlin/gradle/dsl/KotlinAndroidVariantHierarchyDsl;
public abstract fun getUnitTest ()Lorg/jetbrains/kotlin/gradle/dsl/KotlinAndroidVariantHierarchyDsl;
}
public abstract interface class org/jetbrains/kotlin/gradle/dsl/KotlinAndroidVariantHierarchyDsl {
public abstract fun getSourceSetTree ()Lorg/gradle/api/provider/Property;
}
public abstract interface class org/jetbrains/kotlin/gradle/dsl/KotlinArtifact : org/gradle/api/Named, org/gradle/api/plugins/ExtensionAware { public abstract interface class org/jetbrains/kotlin/gradle/dsl/KotlinArtifact : org/gradle/api/Named, org/gradle/api/plugins/ExtensionAware {
public abstract fun getArtifactName ()Ljava/lang/String; public abstract fun getArtifactName ()Ljava/lang/String;
public abstract fun getModules ()Ljava/util/Set; public abstract fun getModules ()Ljava/util/Set;
@@ -520,9 +530,11 @@ public abstract interface class org/jetbrains/kotlin/gradle/dsl/KotlinNativeXCFr
} }
public abstract interface class org/jetbrains/kotlin/gradle/dsl/KotlinTargetHierarchyDsl { public abstract interface class org/jetbrains/kotlin/gradle/dsl/KotlinTargetHierarchyDsl {
public abstract fun android (Lkotlin/jvm/functions/Function1;)V
public abstract fun apply (Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyDescriptor;Lkotlin/jvm/functions/Function1;)V public abstract fun apply (Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyDescriptor;Lkotlin/jvm/functions/Function1;)V
public abstract fun custom (Lkotlin/jvm/functions/Function1;)V public abstract fun custom (Lkotlin/jvm/functions/Function1;)V
public abstract fun default (Lkotlin/jvm/functions/Function1;)V public abstract fun default (Lkotlin/jvm/functions/Function1;)V
public abstract fun getAndroid ()Lorg/jetbrains/kotlin/gradle/dsl/KotlinAndroidTargetHierarchyDsl;
} }
public final class org/jetbrains/kotlin/gradle/dsl/KotlinTargetHierarchyDsl$DefaultImpls { public final class org/jetbrains/kotlin/gradle/dsl/KotlinTargetHierarchyDsl$DefaultImpls {
@@ -1066,8 +1078,8 @@ public abstract interface class org/jetbrains/kotlin/gradle/plugin/KotlinTargetE
public abstract interface class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy { public abstract interface class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy {
} }
public final class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$ModuleName { public final class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$SourceSetTree {
public static final field Companion Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$ModuleName$Companion; public static final field Companion Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$SourceSetTree$Companion;
public fun <init> (Ljava/lang/String;)V public fun <init> (Ljava/lang/String;)V
public fun equals (Ljava/lang/Object;)Z public fun equals (Ljava/lang/Object;)Z
public final fun getName ()Ljava/lang/String; public final fun getName ()Ljava/lang/String;
@@ -1075,12 +1087,12 @@ public final class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$Modu
public fun toString ()Ljava/lang/String; public fun toString ()Ljava/lang/String;
} }
public final class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$ModuleName$Companion { public final class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$SourceSetTree$Companion {
public final fun getInstrumentedTest ()Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$ModuleName; public final fun getInstrumentedTest ()Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$SourceSetTree;
public final fun getIntegrationTest ()Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$ModuleName; public final fun getIntegrationTest ()Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$SourceSetTree;
public final fun getMain ()Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$ModuleName; public final fun getMain ()Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$SourceSetTree;
public final fun getTest ()Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$ModuleName; public final fun getTest ()Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$SourceSetTree;
public final fun getUnitTest ()Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$ModuleName; public final fun getUnitTest ()Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$SourceSetTree;
} }
public abstract interface class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder { public abstract interface class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder {
@@ -1140,9 +1152,9 @@ public final class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuild
} }
public abstract interface class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder$Root : org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder { public abstract interface class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder$Root : org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder {
public abstract fun excludeModule ([Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$ModuleName;)V public abstract fun excludeSourceSetTree ([Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$SourceSetTree;)V
public abstract fun modules ([Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$ModuleName;)V public abstract fun sourceSetTrees ([Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$SourceSetTree;)V
public abstract fun withModule ([Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$ModuleName;)V public abstract fun withSourceSetTree ([Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$SourceSetTree;)V
} }
public final class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder$Root$DefaultImpls { public final class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder$Root$DefaultImpls {
@@ -5,8 +5,11 @@
package org.jetbrains.kotlin.gradle.dsl package org.jetbrains.kotlin.gradle.dsl
import org.gradle.api.provider.Property
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget import org.jetbrains.kotlin.gradle.plugin.KotlinTarget
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetHierarchy
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetHierarchy.SourceSetTree
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetHierarchyBuilder import org.jetbrains.kotlin.gradle.plugin.KotlinTargetHierarchyBuilder
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetHierarchyDescriptor import org.jetbrains.kotlin.gradle.plugin.KotlinTargetHierarchyDescriptor
@@ -81,5 +84,40 @@ interface KotlinTargetHierarchyDsl {
* @see KotlinTargetHierarchyDescriptor.extend * @see KotlinTargetHierarchyDescriptor.extend
*/ */
fun default(describeExtension: (KotlinTargetHierarchyBuilder.Root.() -> Unit)? = null) fun default(describeExtension: (KotlinTargetHierarchyBuilder.Root.() -> Unit)? = null)
fun custom(describe: KotlinTargetHierarchyBuilder.Root.() -> Unit) fun custom(describe: KotlinTargetHierarchyBuilder.Root.() -> Unit)
@ExperimentalKotlinGradlePluginApi
fun android(configure: KotlinAndroidTargetHierarchyDsl.() -> Unit)
@ExperimentalKotlinGradlePluginApi
val android: KotlinAndroidTargetHierarchyDsl
}
@ExperimentalKotlinGradlePluginApi
interface KotlinAndroidTargetHierarchyDsl {
val main: KotlinAndroidVariantHierarchyDsl
val unitTest: KotlinAndroidVariantHierarchyDsl
val instrumentedTest: KotlinAndroidVariantHierarchyDsl
}
@ExperimentalKotlinGradlePluginApi
interface KotlinAndroidVariantHierarchyDsl {
/**
* Configures under which [SourceSetTree] the currently configured Android Variant shall be placed.
* e.g.
*
* ```kotlin
* kotlin {
* targetHierarchy.android {
* instrumentedTest.sourceSetTree.set(SourceSetTree.test)
* }
* }
* ```
*
* Will ensure that all android instrumented tests (androidInstrumentedTest, androidInstrumentedTestDebug, ...)
* will be placed into the 'test' SourceSet tree (with 'commonTest' as root)
*/
val sourceSetTree: Property<SourceSetTree>
} }
@@ -58,7 +58,9 @@ abstract class KotlinMultiplatformExtension(project: Project) :
configure(presetExtension) configure(presetExtension)
} }
internal val internalKotlinTargetHierarchy by lazy { KotlinTargetHierarchyDslImpl(targets, sourceSets) } internal val internalKotlinTargetHierarchy by lazy {
KotlinTargetHierarchyDslImpl(project.kotlinPluginLifecycle, targets, sourceSets)
}
@ExperimentalKotlinGradlePluginApi @ExperimentalKotlinGradlePluginApi
val targetHierarchy: KotlinTargetHierarchyDsl get() = internalKotlinTargetHierarchy val targetHierarchy: KotlinTargetHierarchyDsl get() = internalKotlinTargetHierarchy
@@ -5,6 +5,9 @@
package org.jetbrains.kotlin.gradle.plugin.mpp.targetHierarchy package org.jetbrains.kotlin.gradle.plugin.mpp.targetHierarchy
import org.jetbrains.kotlin.gradle.dsl.kotlinExtension
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetHierarchy.SourceSetTree import org.jetbrains.kotlin.gradle.plugin.KotlinTargetHierarchy.SourceSetTree
import org.jetbrains.kotlin.gradle.plugin.awaitFinalValue import org.jetbrains.kotlin.gradle.plugin.awaitFinalValue
@@ -26,12 +29,15 @@ internal suspend fun SourceSetTree.Companion.orNull(compilation: KotlinCompilati
internal suspend fun SourceSetTree.Companion.orNull( internal suspend fun SourceSetTree.Companion.orNull(
target: KotlinAndroidTarget, target: KotlinAndroidTarget,
variantType: AndroidVariantType variantType: AndroidVariantType
): SourceSetTree? = when (variantType) { ): SourceSetTree? {
AndroidVariantType.Main -> val multiplatform = target.project.multiplatformExtensionOrNull ?: return null
target.main.targetHierarchy.sourceSetTree.awaitFinalValue() ?: main return when (variantType) {
AndroidVariantType.UnitTest -> AndroidVariantType.Main ->
target.unitTest.targetHierarchy.sourceSetTree.awaitFinalValue() ?: test multiplatform.targetHierarchy.android.main.sourceSetTree.awaitFinalValue() ?: main
AndroidVariantType.InstrumentedTest -> AndroidVariantType.UnitTest ->
target.instrumentedTest.targetHierarchy.sourceSetTree.awaitFinalValue() ?: instrumentedTest multiplatform.targetHierarchy.android.unitTest.sourceSetTree.awaitFinalValue() ?: test
AndroidVariantType.Unknown -> null AndroidVariantType.InstrumentedTest ->
multiplatform.targetHierarchy.android.instrumentedTest.sourceSetTree.awaitFinalValue() ?: instrumentedTest
AndroidVariantType.Unknown -> null
}
} }
@@ -7,13 +7,16 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.targetHierarchy
import org.gradle.api.DomainObjectCollection import org.gradle.api.DomainObjectCollection
import org.gradle.api.NamedDomainObjectContainer import org.gradle.api.NamedDomainObjectContainer
import org.gradle.api.model.ObjectFactory
import org.gradle.api.provider.Property
import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidTargetHierarchyDsl
import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidVariantHierarchyDsl
import org.jetbrains.kotlin.gradle.dsl.KotlinTargetHierarchyDsl import org.jetbrains.kotlin.gradle.dsl.KotlinTargetHierarchyDsl
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.*
import org.jetbrains.kotlin.gradle.plugin.KotlinTarget import org.jetbrains.kotlin.gradle.utils.property
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetHierarchyBuilder
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetHierarchyDescriptor
internal class KotlinTargetHierarchyDslImpl( internal class KotlinTargetHierarchyDslImpl(
private val lifecycle: KotlinPluginLifecycle,
private val targets: DomainObjectCollection<KotlinTarget>, private val targets: DomainObjectCollection<KotlinTarget>,
private val sourceSets: NamedDomainObjectContainer<KotlinSourceSet> private val sourceSets: NamedDomainObjectContainer<KotlinSourceSet>
) : KotlinTargetHierarchyDsl { ) : KotlinTargetHierarchyDsl {
@@ -21,6 +24,8 @@ internal class KotlinTargetHierarchyDslImpl(
private val _appliedDescriptors = mutableListOf<KotlinTargetHierarchyDescriptor>() private val _appliedDescriptors = mutableListOf<KotlinTargetHierarchyDescriptor>()
val appliedDescriptors: List<KotlinTargetHierarchyDescriptor> get() = _appliedDescriptors val appliedDescriptors: List<KotlinTargetHierarchyDescriptor> get() = _appliedDescriptors
override val android: KotlinAndroidTargetHierarchyDsl = KotlinAndroidTargetHierarchyDslImpl(lifecycle)
override fun apply( override fun apply(
hierarchyDescriptor: KotlinTargetHierarchyDescriptor, hierarchyDescriptor: KotlinTargetHierarchyDescriptor,
describeExtension: (KotlinTargetHierarchyBuilder.Root.() -> Unit)? describeExtension: (KotlinTargetHierarchyBuilder.Root.() -> Unit)?
@@ -37,7 +42,21 @@ internal class KotlinTargetHierarchyDslImpl(
override fun custom(describe: KotlinTargetHierarchyBuilder.Root.() -> Unit) { override fun custom(describe: KotlinTargetHierarchyBuilder.Root.() -> Unit) {
apply(KotlinTargetHierarchyDescriptor(describe)) apply(KotlinTargetHierarchyDescriptor(describe))
} }
override fun android(configure: KotlinAndroidTargetHierarchyDsl.() -> Unit) {
android.configure()
}
} }
private fun KotlinTargetHierarchyDescriptor.extendIfNotNull(describe: (KotlinTargetHierarchyBuilder.Root.() -> Unit)?) = private fun KotlinTargetHierarchyDescriptor.extendIfNotNull(describe: (KotlinTargetHierarchyBuilder.Root.() -> Unit)?) =
if (describe == null) this else extend(describe) if (describe == null) this else extend(describe)
internal class KotlinAndroidTargetHierarchyDslImpl(lifecycle: KotlinPluginLifecycle) : KotlinAndroidTargetHierarchyDsl {
override val main: KotlinAndroidVariantHierarchyDsl = KotlinAndroidVariantHierarchyDslImpl(lifecycle)
override val unitTest: KotlinAndroidVariantHierarchyDsl = KotlinAndroidVariantHierarchyDslImpl(lifecycle)
override val instrumentedTest: KotlinAndroidVariantHierarchyDsl = KotlinAndroidVariantHierarchyDslImpl(lifecycle)
}
internal class KotlinAndroidVariantHierarchyDslImpl(lifecycle: KotlinPluginLifecycle) : KotlinAndroidVariantHierarchyDsl {
override val sourceSetTree: Property<KotlinTargetHierarchy.SourceSetTree> by lifecycle.newProperty()
}
@@ -14,11 +14,8 @@ import org.gradle.api.Project
import org.gradle.api.artifacts.Configuration import org.gradle.api.artifacts.Configuration
import org.gradle.api.attributes.Attribute import org.gradle.api.attributes.Attribute
import org.gradle.api.attributes.AttributeContainer import org.gradle.api.attributes.AttributeContainer
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
import org.jetbrains.kotlin.gradle.plugin.* import org.jetbrains.kotlin.gradle.plugin.*
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.copyAttributes import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.copyAttributes
import org.jetbrains.kotlin.gradle.targets.android.KotlinAndroidTargetVariantTypeDsl
import org.jetbrains.kotlin.gradle.targets.android.KotlinAndroidTargetVariantTypeDslImpl
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.forAllAndroidVariants
import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName
@@ -40,14 +37,6 @@ abstract class KotlinAndroidTarget @Inject constructor(
override val compilations: NamedDomainObjectContainer<out KotlinJvmAndroidCompilation> = override val compilations: NamedDomainObjectContainer<out KotlinJvmAndroidCompilation> =
project.container(KotlinJvmAndroidCompilation::class.java) project.container(KotlinJvmAndroidCompilation::class.java)
@ExperimentalKotlinGradlePluginApi
val main: KotlinAndroidTargetVariantTypeDsl = KotlinAndroidTargetVariantTypeDslImpl(project)
@ExperimentalKotlinGradlePluginApi
val unitTest: KotlinAndroidTargetVariantTypeDsl = KotlinAndroidTargetVariantTypeDslImpl(project)
@ExperimentalKotlinGradlePluginApi
val instrumentedTest: KotlinAndroidTargetVariantTypeDsl = KotlinAndroidTargetVariantTypeDslImpl(project)
/** Names of the Android library variants that should be published from the target's project within the default publications which are /** Names of the Android library variants that should be published from the target's project within the default publications which are
* set up if the `maven-publish` Gradle plugin is applied. * set up if the `maven-publish` Gradle plugin is applied.
@@ -1,38 +0,0 @@
/*
* Copyright 2010-2023 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.targets.android
import org.gradle.api.Action
import org.gradle.api.Project
import org.gradle.api.provider.Property
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
import org.jetbrains.kotlin.gradle.plugin.KotlinPluginLifecycle.Stage.FinaliseDsl
import org.jetbrains.kotlin.gradle.plugin.KotlinTargetHierarchy
import org.jetbrains.kotlin.gradle.plugin.newKotlinPluginLifecycleAwareProperty
@ExperimentalKotlinGradlePluginApi
interface KotlinAndroidTargetVariantTypeDsl {
interface TargetHierarchyDsl {
/**
* See [KotlinTargetHierarchy.SourceSetTree]
*/
val sourceSetTree: Property<KotlinTargetHierarchy.SourceSetTree>
}
val targetHierarchy: TargetHierarchyDsl
fun targetHierarchy(configure: TargetHierarchyDsl.() -> Unit): Unit = targetHierarchy.configure()
fun targetHierarchy(configure: Action<@UnsafeVariance TargetHierarchyDsl>): Unit = configure.execute(targetHierarchy)
}
internal class KotlinAndroidTargetVariantTypeDslImpl(private val project: Project) : KotlinAndroidTargetVariantTypeDsl {
internal inner class TargetHierarchyDslImpl : KotlinAndroidTargetVariantTypeDsl.TargetHierarchyDsl {
override val sourceSetTree: Property<KotlinTargetHierarchy.SourceSetTree>
by project.newKotlinPluginLifecycleAwareProperty(FinaliseDsl)
}
override val targetHierarchy: KotlinAndroidTargetVariantTypeDsl.TargetHierarchyDsl = TargetHierarchyDslImpl()
}
@@ -15,41 +15,41 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinPluginLifecycle.Stage.AfterFinal
import org.jetbrains.kotlin.gradle.plugin.awaitFinalValue import org.jetbrains.kotlin.gradle.plugin.awaitFinalValue
import org.jetbrains.kotlin.gradle.plugin.currentKotlinPluginLifecycle import org.jetbrains.kotlin.gradle.plugin.currentKotlinPluginLifecycle
import org.jetbrains.kotlin.gradle.plugin.kotlinPluginLifecycle import org.jetbrains.kotlin.gradle.plugin.kotlinPluginLifecycle
import org.jetbrains.kotlin.gradle.targets.android.KotlinAndroidTargetVariantTypeDslImpl import org.jetbrains.kotlin.gradle.plugin.mpp.targetHierarchy.KotlinAndroidVariantHierarchyDslImpl
import org.jetbrains.kotlin.gradle.util.* import org.jetbrains.kotlin.gradle.util.*
import org.junit.Test import org.junit.Test
import kotlin.test.assertEquals import kotlin.test.assertEquals
import kotlin.test.assertFails import kotlin.test.assertFails
class KotlinAndroidTargetVariantTypeDslImplTest { class KotlinAndroidTargetHierarchyDsl {
private val project = buildProjectWithMPP()
private val dsl = KotlinAndroidTargetVariantTypeDslImpl(project)
@Test @Test
fun `test - module - not set`() = project.runLifecycleAwareTest { fun `test - module - not set`() = buildProjectWithMPP().runLifecycleAwareTest {
val dsl = KotlinAndroidVariantHierarchyDslImpl(project.kotlinPluginLifecycle)
project.kotlinPluginLifecycle.launch { project.kotlinPluginLifecycle.launch {
assertNull(dsl.targetHierarchy.sourceSetTree.orNull) assertNull(dsl.sourceSetTree.orNull)
assertNull(dsl.targetHierarchy.sourceSetTree.awaitFinalValue()) assertNull(dsl.sourceSetTree.awaitFinalValue())
} }
} }
@Test @Test
fun `test - module - can be set in users afterEvaluate`() = project.runLifecycleAwareTest { fun `test - module - can be set in users afterEvaluate`() = buildProjectWithMPP().runLifecycleAwareTest {
afterEvaluate { dsl.targetHierarchy.sourceSetTree.set(KotlinTargetHierarchy.SourceSetTree("x")) } val dsl = KotlinAndroidVariantHierarchyDslImpl(project.kotlinPluginLifecycle)
dsl.targetHierarchy.sourceSetTree.set(KotlinTargetHierarchy.SourceSetTree("-set-before-after-evaluate-")) afterEvaluate { dsl.sourceSetTree.set(KotlinTargetHierarchy.SourceSetTree("x")) }
assertEquals("x", dsl.targetHierarchy.sourceSetTree.awaitFinalValue()?.name) dsl.sourceSetTree.set(KotlinTargetHierarchy.SourceSetTree("-set-before-after-evaluate-"))
assertEquals("x", dsl.sourceSetTree.awaitFinalValue()?.name)
assertEquals(KotlinPluginLifecycle.Stage.FinaliseDsl, currentKotlinPluginLifecycle().stage) assertEquals(KotlinPluginLifecycle.Stage.FinaliseDsl, currentKotlinPluginLifecycle().stage)
} }
@Test @Test
fun `test - module - cannot be set after FinaliseDsl`() = project.runLifecycleAwareTest { fun `test - module - cannot be set after FinaliseDsl`() = buildProjectWithMPP().runLifecycleAwareTest {
val dsl = KotlinAndroidVariantHierarchyDslImpl(project.kotlinPluginLifecycle)
launchInStage(KotlinPluginLifecycle.Stage.FinaliseDsl.previousOrThrow) { launchInStage(KotlinPluginLifecycle.Stage.FinaliseDsl.previousOrThrow) {
dsl.targetHierarchy.sourceSetTree.set(KotlinTargetHierarchy.SourceSetTree("x")) dsl.sourceSetTree.set(KotlinTargetHierarchy.SourceSetTree("x"))
} }
launchInStage(KotlinPluginLifecycle.Stage.FinaliseDsl) { launchInStage(KotlinPluginLifecycle.Stage.FinaliseDsl) {
assertFails { dsl.targetHierarchy.sourceSetTree.set(KotlinTargetHierarchy.SourceSetTree("y")) } assertFails { dsl.sourceSetTree.set(KotlinTargetHierarchy.SourceSetTree("y")) }
} }
} }
@@ -63,9 +63,11 @@ class KotlinAndroidTargetVariantTypeDslImplTest {
val kotlin = project.multiplatformExtension val kotlin = project.multiplatformExtension
project.runLifecycleAwareTest { project.runLifecycleAwareTest {
kotlin.android { kotlin.android()
unitTest.targetHierarchy.sourceSetTree.set(KotlinTargetHierarchy.SourceSetTree.test)
instrumentedTest.targetHierarchy.sourceSetTree.set(KotlinTargetHierarchy.SourceSetTree.test) kotlin.targetHierarchy.android {
unitTest.sourceSetTree.set(KotlinTargetHierarchy.SourceSetTree.test)
instrumentedTest.sourceSetTree.set(KotlinTargetHierarchy.SourceSetTree.test)
} }
AfterFinaliseRefinesEdges.await() AfterFinaliseRefinesEdges.await()
@@ -85,9 +87,11 @@ class KotlinAndroidTargetVariantTypeDslImplTest {
val kotlin = project.multiplatformExtension val kotlin = project.multiplatformExtension
project.runLifecycleAwareTest { project.runLifecycleAwareTest {
kotlin.android { kotlin.android()
unitTest.targetHierarchy.sourceSetTree.set(KotlinTargetHierarchy.SourceSetTree("xxx"))
instrumentedTest.targetHierarchy.sourceSetTree.set(KotlinTargetHierarchy.SourceSetTree("yyy")) kotlin.targetHierarchy.android {
unitTest.sourceSetTree.set(KotlinTargetHierarchy.SourceSetTree("xxx"))
instrumentedTest.sourceSetTree.set(KotlinTargetHierarchy.SourceSetTree("yyy"))
} }
kotlin.targetHierarchy.default { kotlin.targetHierarchy.default {