diff --git a/libraries/tools/kotlin-gradle-plugin-api/api/kotlin-gradle-plugin-api.api b/libraries/tools/kotlin-gradle-plugin-api/api/kotlin-gradle-plugin-api.api index 207f1ab78af..ea5979d96e1 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/api/kotlin-gradle-plugin-api.api +++ b/libraries/tools/kotlin-gradle-plugin-api/api/kotlin-gradle-plugin-api.api @@ -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 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 fun getArtifactName ()Ljava/lang/String; 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 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 custom (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 { @@ -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 final class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$ModuleName { - public static final field Companion Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$ModuleName$Companion; +public final class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$SourceSetTree { + public static final field Companion Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$SourceSetTree$Companion; public fun (Ljava/lang/String;)V public fun equals (Ljava/lang/Object;)Z 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 final class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$ModuleName$Companion { - public final fun getInstrumentedTest ()Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$ModuleName; - public final fun getIntegrationTest ()Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$ModuleName; - public final fun getMain ()Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$ModuleName; - public final fun getTest ()Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$ModuleName; - public final fun getUnitTest ()Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$ModuleName; +public final class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$SourceSetTree$Companion { + public final fun getInstrumentedTest ()Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$SourceSetTree; + public final fun getIntegrationTest ()Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$SourceSetTree; + public final fun getMain ()Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$SourceSetTree; + public final fun getTest ()Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$SourceSetTree; + public final fun getUnitTest ()Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$SourceSetTree; } 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 fun excludeModule ([Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$ModuleName;)V - public abstract fun modules ([Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$ModuleName;)V - public abstract fun withModule ([Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$ModuleName;)V + public abstract fun excludeSourceSetTree ([Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$SourceSetTree;)V + public abstract fun sourceSetTrees ([Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$SourceSetTree;)V + public abstract fun withSourceSetTree ([Lorg/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchy$SourceSetTree;)V } public final class org/jetbrains/kotlin/gradle/plugin/KotlinTargetHierarchyBuilder$Root$DefaultImpls { diff --git a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinTargetHierarchyDsl.kt b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinTargetHierarchyDsl.kt index 5f064c019ce..ff9105f0d4d 100644 --- a/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinTargetHierarchyDsl.kt +++ b/libraries/tools/kotlin-gradle-plugin-api/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinTargetHierarchyDsl.kt @@ -5,8 +5,11 @@ package org.jetbrains.kotlin.gradle.dsl +import org.gradle.api.provider.Property import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi 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.KotlinTargetHierarchyDescriptor @@ -81,5 +84,40 @@ interface KotlinTargetHierarchyDsl { * @see KotlinTargetHierarchyDescriptor.extend */ fun default(describeExtension: (KotlinTargetHierarchyBuilder.Root.() -> Unit)? = null) + 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 +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformExtension.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformExtension.kt index 7ccff51e3b0..2fcab2f3ce8 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformExtension.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/dsl/KotlinMultiplatformExtension.kt @@ -58,7 +58,9 @@ abstract class KotlinMultiplatformExtension(project: Project) : configure(presetExtension) } - internal val internalKotlinTargetHierarchy by lazy { KotlinTargetHierarchyDslImpl(targets, sourceSets) } + internal val internalKotlinTargetHierarchy by lazy { + KotlinTargetHierarchyDslImpl(project.kotlinPluginLifecycle, targets, sourceSets) + } @ExperimentalKotlinGradlePluginApi val targetHierarchy: KotlinTargetHierarchyDsl get() = internalKotlinTargetHierarchy diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/targetHierarchy/KotlinTargetHierarchy.SourceSetTree+orNull.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/targetHierarchy/KotlinTargetHierarchy.SourceSetTree+orNull.kt index 07163cecd77..69ad1971439 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/targetHierarchy/KotlinTargetHierarchy.SourceSetTree+orNull.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/targetHierarchy/KotlinTargetHierarchy.SourceSetTree+orNull.kt @@ -5,6 +5,9 @@ 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.KotlinTargetHierarchy.SourceSetTree 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( target: KotlinAndroidTarget, variantType: AndroidVariantType -): SourceSetTree? = when (variantType) { - AndroidVariantType.Main -> - target.main.targetHierarchy.sourceSetTree.awaitFinalValue() ?: main - AndroidVariantType.UnitTest -> - target.unitTest.targetHierarchy.sourceSetTree.awaitFinalValue() ?: test - AndroidVariantType.InstrumentedTest -> - target.instrumentedTest.targetHierarchy.sourceSetTree.awaitFinalValue() ?: instrumentedTest - AndroidVariantType.Unknown -> null +): SourceSetTree? { + val multiplatform = target.project.multiplatformExtensionOrNull ?: return null + return when (variantType) { + AndroidVariantType.Main -> + multiplatform.targetHierarchy.android.main.sourceSetTree.awaitFinalValue() ?: main + AndroidVariantType.UnitTest -> + multiplatform.targetHierarchy.android.unitTest.sourceSetTree.awaitFinalValue() ?: test + AndroidVariantType.InstrumentedTest -> + multiplatform.targetHierarchy.android.instrumentedTest.sourceSetTree.awaitFinalValue() ?: instrumentedTest + AndroidVariantType.Unknown -> null + } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/targetHierarchy/KotlinTargetHierarchyDslImpl.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/targetHierarchy/KotlinTargetHierarchyDslImpl.kt index a523cb33718..1872c34dccc 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/targetHierarchy/KotlinTargetHierarchyDslImpl.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/targetHierarchy/KotlinTargetHierarchyDslImpl.kt @@ -7,13 +7,16 @@ package org.jetbrains.kotlin.gradle.plugin.mpp.targetHierarchy import org.gradle.api.DomainObjectCollection 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.plugin.KotlinSourceSet -import org.jetbrains.kotlin.gradle.plugin.KotlinTarget -import org.jetbrains.kotlin.gradle.plugin.KotlinTargetHierarchyBuilder -import org.jetbrains.kotlin.gradle.plugin.KotlinTargetHierarchyDescriptor +import org.jetbrains.kotlin.gradle.plugin.* +import org.jetbrains.kotlin.gradle.utils.property internal class KotlinTargetHierarchyDslImpl( + private val lifecycle: KotlinPluginLifecycle, private val targets: DomainObjectCollection, private val sourceSets: NamedDomainObjectContainer ) : KotlinTargetHierarchyDsl { @@ -21,6 +24,8 @@ internal class KotlinTargetHierarchyDslImpl( private val _appliedDescriptors = mutableListOf() val appliedDescriptors: List get() = _appliedDescriptors + override val android: KotlinAndroidTargetHierarchyDsl = KotlinAndroidTargetHierarchyDslImpl(lifecycle) + override fun apply( hierarchyDescriptor: KotlinTargetHierarchyDescriptor, describeExtension: (KotlinTargetHierarchyBuilder.Root.() -> Unit)? @@ -37,7 +42,21 @@ internal class KotlinTargetHierarchyDslImpl( override fun custom(describe: KotlinTargetHierarchyBuilder.Root.() -> Unit) { apply(KotlinTargetHierarchyDescriptor(describe)) } + + override fun android(configure: KotlinAndroidTargetHierarchyDsl.() -> Unit) { + android.configure() + } } private fun KotlinTargetHierarchyDescriptor.extendIfNotNull(describe: (KotlinTargetHierarchyBuilder.Root.() -> Unit)?) = - if (describe == null) this else extend(describe) \ No newline at end of file + 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 by lifecycle.newProperty() +} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/android/KotlinAndroidTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/android/KotlinAndroidTarget.kt index ad4818d5581..c52c61ed54a 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/android/KotlinAndroidTarget.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/android/KotlinAndroidTarget.kt @@ -14,11 +14,8 @@ import org.gradle.api.Project import org.gradle.api.artifacts.Configuration import org.gradle.api.attributes.Attribute import org.gradle.api.attributes.AttributeContainer -import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.plugin.* 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.forAllAndroidVariants import org.jetbrains.kotlin.gradle.utils.lowerCamelCaseName @@ -40,14 +37,6 @@ abstract class KotlinAndroidTarget @Inject constructor( override val compilations: NamedDomainObjectContainer = 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 * set up if the `maven-publish` Gradle plugin is applied. diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/android/KotlinAndroidTargetVariantTypeDsl.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/android/KotlinAndroidTargetVariantTypeDsl.kt deleted file mode 100644 index d7e18a553f7..00000000000 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/android/KotlinAndroidTargetVariantTypeDsl.kt +++ /dev/null @@ -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 - } - - 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 - by project.newKotlinPluginLifecycleAwareProperty(FinaliseDsl) - } - - override val targetHierarchy: KotlinAndroidTargetVariantTypeDsl.TargetHierarchyDsl = TargetHierarchyDslImpl() -} \ No newline at end of file diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinAndroidTargetVariantTypeDslImplTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinAndroidTargetHierarchyDsl.kt similarity index 64% rename from libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinAndroidTargetVariantTypeDslImplTest.kt rename to libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinAndroidTargetHierarchyDsl.kt index 6dc5bedf853..5ca311c9243 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinAndroidTargetVariantTypeDslImplTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinAndroidTargetHierarchyDsl.kt @@ -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.currentKotlinPluginLifecycle 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.junit.Test import kotlin.test.assertEquals import kotlin.test.assertFails -class KotlinAndroidTargetVariantTypeDslImplTest { - private val project = buildProjectWithMPP() - private val dsl = KotlinAndroidTargetVariantTypeDslImpl(project) - +class KotlinAndroidTargetHierarchyDsl { @Test - fun `test - module - not set`() = project.runLifecycleAwareTest { + fun `test - module - not set`() = buildProjectWithMPP().runLifecycleAwareTest { + val dsl = KotlinAndroidVariantHierarchyDslImpl(project.kotlinPluginLifecycle) project.kotlinPluginLifecycle.launch { - assertNull(dsl.targetHierarchy.sourceSetTree.orNull) - assertNull(dsl.targetHierarchy.sourceSetTree.awaitFinalValue()) + assertNull(dsl.sourceSetTree.orNull) + assertNull(dsl.sourceSetTree.awaitFinalValue()) } } @Test - fun `test - module - can be set in users afterEvaluate`() = project.runLifecycleAwareTest { - afterEvaluate { dsl.targetHierarchy.sourceSetTree.set(KotlinTargetHierarchy.SourceSetTree("x")) } - dsl.targetHierarchy.sourceSetTree.set(KotlinTargetHierarchy.SourceSetTree("-set-before-after-evaluate-")) - assertEquals("x", dsl.targetHierarchy.sourceSetTree.awaitFinalValue()?.name) + fun `test - module - can be set in users afterEvaluate`() = buildProjectWithMPP().runLifecycleAwareTest { + val dsl = KotlinAndroidVariantHierarchyDslImpl(project.kotlinPluginLifecycle) + afterEvaluate { dsl.sourceSetTree.set(KotlinTargetHierarchy.SourceSetTree("x")) } + dsl.sourceSetTree.set(KotlinTargetHierarchy.SourceSetTree("-set-before-after-evaluate-")) + assertEquals("x", dsl.sourceSetTree.awaitFinalValue()?.name) assertEquals(KotlinPluginLifecycle.Stage.FinaliseDsl, currentKotlinPluginLifecycle().stage) } @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) { - dsl.targetHierarchy.sourceSetTree.set(KotlinTargetHierarchy.SourceSetTree("x")) + dsl.sourceSetTree.set(KotlinTargetHierarchy.SourceSetTree("x")) } 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 project.runLifecycleAwareTest { - kotlin.android { - unitTest.targetHierarchy.sourceSetTree.set(KotlinTargetHierarchy.SourceSetTree.test) - instrumentedTest.targetHierarchy.sourceSetTree.set(KotlinTargetHierarchy.SourceSetTree.test) + kotlin.android() + + kotlin.targetHierarchy.android { + unitTest.sourceSetTree.set(KotlinTargetHierarchy.SourceSetTree.test) + instrumentedTest.sourceSetTree.set(KotlinTargetHierarchy.SourceSetTree.test) } AfterFinaliseRefinesEdges.await() @@ -85,9 +87,11 @@ class KotlinAndroidTargetVariantTypeDslImplTest { val kotlin = project.multiplatformExtension project.runLifecycleAwareTest { - kotlin.android { - unitTest.targetHierarchy.sourceSetTree.set(KotlinTargetHierarchy.SourceSetTree("xxx")) - instrumentedTest.targetHierarchy.sourceSetTree.set(KotlinTargetHierarchy.SourceSetTree("yyy")) + kotlin.android() + + kotlin.targetHierarchy.android { + unitTest.sourceSetTree.set(KotlinTargetHierarchy.SourceSetTree("xxx")) + instrumentedTest.sourceSetTree.set(KotlinTargetHierarchy.SourceSetTree("yyy")) } kotlin.targetHierarchy.default {