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 88b773b7458..a566b33fa78 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 @@ -52,8 +52,10 @@ abstract class KotlinMultiplatformExtension(project: Project) : configure(presetExtension) } + internal val internalKotlinTargetHierarchy by lazy { KotlinTargetHierarchyDslImpl(targets, sourceSets) } + @ExperimentalKotlinGradlePluginApi - val targetHierarchy: KotlinTargetHierarchyDsl get() = KotlinTargetHierarchyDslImpl(targets, sourceSets) + val targetHierarchy: KotlinTargetHierarchyDsl get() = internalKotlinTargetHierarchy @Suppress("unused") // DSL val testableTargets: NamedDomainObjectCollection> diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt index 61148faf77d..d3c7bfd0ffa 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/KotlinMultiplatformPlugin.kt @@ -171,14 +171,18 @@ class KotlinMultiplatformPlugin : Plugin { private fun configureSourceSets(project: Project) = with(project.multiplatformExtension) { val production = sourceSets.create(KotlinSourceSet.COMMON_MAIN_SOURCE_SET_NAME) val test = sourceSets.create(KotlinSourceSet.COMMON_TEST_SOURCE_SET_NAME) - targets.all { target -> - target.compilations.findByName(KotlinCompilation.MAIN_COMPILATION_NAME)?.let { mainCompilation -> - mainCompilation.defaultSourceSet.takeIf { it != production }?.dependsOn(production) - } + project.launch(KotlinMultiplatformPluginLifecycle.Stage.FinaliseRefinesEdges) { + /* Only setup default refines edges when no KotlinTargetHierarchy was applied */ + if (project.multiplatformExtension.internalKotlinTargetHierarchy.appliedDescriptors.isNotEmpty()) return@launch - target.compilations.findByName(KotlinCompilation.TEST_COMPILATION_NAME)?.let { testCompilation -> - testCompilation.defaultSourceSet.takeIf { it != test }?.dependsOn(test) + target.compilations.findByName(KotlinCompilation.MAIN_COMPILATION_NAME)?.let { mainCompilation -> + mainCompilation.defaultSourceSet.takeIf { it != production }?.dependsOn(production) + } + + target.compilations.findByName(KotlinCompilation.TEST_COMPILATION_NAME)?.let { testCompilation -> + testCompilation.defaultSourceSet.takeIf { it != test }?.dependsOn(test) + } } val targetName = if (target is KotlinNativeTarget) 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 0dbda37ba1c..880608f1672 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 @@ -17,11 +17,17 @@ internal class KotlinTargetHierarchyDslImpl( private val targets: DomainObjectCollection, private val sourceSets: NamedDomainObjectContainer ) : KotlinTargetHierarchyDsl { + + private val _appliedDescriptors = mutableListOf() + val appliedDescriptors: List get() = _appliedDescriptors + override fun apply( hierarchyDescriptor: KotlinTargetHierarchyDescriptor, describeExtension: (KotlinTargetHierarchyBuilder.() -> Unit)? ) { - applyKotlinTargetHierarchy(hierarchyDescriptor.extendIfNotNull(describeExtension), targets, sourceSets) + val descriptor = hierarchyDescriptor.extendIfNotNull(describeExtension) + _appliedDescriptors.add(descriptor) + applyKotlinTargetHierarchy(descriptor, targets, sourceSets) } override fun default(describeExtension: (KotlinTargetHierarchyBuilder.() -> Unit)?) { diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/android/configurator/MultiplatformLayoutV2DependsOnConfigurator.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/android/configurator/MultiplatformLayoutV2DependsOnConfigurator.kt index 639c61e5998..9ea47dee749 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/android/configurator/MultiplatformLayoutV2DependsOnConfigurator.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/android/configurator/MultiplatformLayoutV2DependsOnConfigurator.kt @@ -8,9 +8,12 @@ package org.jetbrains.kotlin.gradle.plugin.sources.android.configurator import com.android.build.gradle.api.AndroidSourceSet import com.android.build.gradle.api.BaseVariant import org.jetbrains.kotlin.gradle.dsl.kotlinExtension +import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull +import org.jetbrains.kotlin.gradle.plugin.KotlinMultiplatformPluginLifecycle import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet.Companion.COMMON_MAIN_SOURCE_SET_NAME import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet.Companion.COMMON_TEST_SOURCE_SET_NAME +import org.jetbrains.kotlin.gradle.plugin.kotlinMultiplatformPluginLifecycle import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinAndroidTarget import org.jetbrains.kotlin.gradle.plugin.sources.android.AndroidBaseSourceSetName import org.jetbrains.kotlin.gradle.plugin.sources.android.AndroidVariantType @@ -28,14 +31,22 @@ internal object MultiplatformLayoutV2DependsOnConfigurator : KotlinAndroidSource } private fun setDefaultDependsOn(target: KotlinAndroidTarget, kotlinSourceSet: KotlinSourceSet, variantType: AndroidVariantType) { - /* Add default dependency on 'commonMain' or 'commonTest' */ - val commonMain = target.project.kotlinExtension.sourceSets.getByName(COMMON_MAIN_SOURCE_SET_NAME) - val commonTest = target.project.kotlinExtension.sourceSets.getByName(COMMON_TEST_SOURCE_SET_NAME) + target.project.kotlinMultiplatformPluginLifecycle.launch { + await(KotlinMultiplatformPluginLifecycle.Stage.FinaliseRefinesEdges) + /* Only setup default if not KotlinTargetHierarchy was applied */ + if (target.project.multiplatformExtensionOrNull?.internalKotlinTargetHierarchy?.appliedDescriptors.orEmpty().isNotEmpty()) { + return@launch + } - when (variantType) { - AndroidVariantType.Main -> kotlinSourceSet.dependsOn(commonMain) - AndroidVariantType.UnitTest -> kotlinSourceSet.dependsOn(commonTest) - AndroidVariantType.InstrumentedTest, AndroidVariantType.Unknown -> Unit + /* Add default dependency on 'commonMain' or 'commonTest' */ + val commonMain = target.project.kotlinExtension.sourceSets.getByName(COMMON_MAIN_SOURCE_SET_NAME) + val commonTest = target.project.kotlinExtension.sourceSets.getByName(COMMON_TEST_SOURCE_SET_NAME) + + when (variantType) { + AndroidVariantType.Main -> kotlinSourceSet.dependsOn(commonMain) + AndroidVariantType.UnitTest -> kotlinSourceSet.dependsOn(commonTest) + AndroidVariantType.InstrumentedTest, AndroidVariantType.Unknown -> Unit + } } } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeDependsOnDependencyResolverTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeDependsOnDependencyResolverTest.kt index 766d6a8f2d7..19b8a694f42 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeDependsOnDependencyResolverTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeDependsOnDependencyResolverTest.kt @@ -20,6 +20,7 @@ class IdeDependsOnDependencyResolverTest { fun `test - sample 0 - default dependsOn to commonMain and commonTest`() { val project = buildProjectWithMPP() val kotlin = project.multiplatformExtension + kotlin.targetHierarchy.default() kotlin.jvm() val commonMain = kotlin.sourceSets.getByName("commonMain") @@ -41,6 +42,7 @@ class IdeDependsOnDependencyResolverTest { fun `test - sample 1 - custom dependsOn edge`() { val project = buildProjectWithMPP() val kotlin = project.multiplatformExtension + kotlin.targetHierarchy.default() kotlin.jvm() val commonMain = kotlin.sourceSets.getByName("commonMain") val customMain = kotlin.sourceSets.create("customMain") diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeNativePlatformDependencyResolverTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeNativePlatformDependencyResolverTest.kt index c371911a5c8..184e830c400 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeNativePlatformDependencyResolverTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeNativePlatformDependencyResolverTest.kt @@ -25,6 +25,7 @@ class IdeNativePlatformDependencyResolverTest { fun `test - posix on linux`() { val project = buildProjectWithMPP() val kotlin = project.multiplatformExtension + kotlin.targetHierarchy.default() kotlin.linuxX64() val commonMain = kotlin.sourceSets.getByName("commonMain") @@ -48,6 +49,7 @@ class IdeNativePlatformDependencyResolverTest { Assume.assumeTrue("Macos host required for this test", HostManager.hostIsMac) val project = buildProjectWithMPP() val kotlin = project.multiplatformExtension + kotlin.targetHierarchy.default() kotlin.macosArm64() val commonMain = kotlin.sourceSets.getByName("commonMain") diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/CInteropMetadataDependencyTransformationTaskTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/CInteropMetadataDependencyTransformationTaskTest.kt index 627724fd6ed..7c96bd84138 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/CInteropMetadataDependencyTransformationTaskTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/CInteropMetadataDependencyTransformationTaskTest.kt @@ -82,6 +82,7 @@ class CInteropMetadataDependencyTransformationTaskTest : MultiplatformExtensionT @Test fun `test task disabled for non shared-native source sets`() { project.enableCInteropCommonization(true) + kotlin.targetHierarchy.default() kotlin.linuxArm64() kotlin.linuxX64() kotlin.jvm() @@ -89,13 +90,12 @@ class CInteropMetadataDependencyTransformationTaskTest : MultiplatformExtensionT val commonMain = kotlin.sourceSets.getByName("commonMain") val linuxArm64Main = kotlin.sourceSets.getByName("linuxArm64Main") val linuxX64Main = kotlin.sourceSets.getByName("linuxX64Main") - val linuxMain = kotlin.sourceSets.create("linuxMain") as DefaultKotlinSourceSet + val linuxMain = kotlin.sourceSets.getByName("linuxMain") as DefaultKotlinSourceSet linuxMain.dependsOn(commonMain) linuxArm64Main.dependsOn(linuxMain) linuxX64Main.dependsOn(linuxMain) - listOf( "commonMain", "jvmMain", "linuxArm64Main", "linuxX64Main" ).map { sourceSetName -> kotlin.sourceSets.getByName(sourceSetName) }.forEach { sourceSet -> diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/K2MultiplatformStructureTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/K2MultiplatformStructureTest.kt index 4eb0468aa9e..447ebb1bed5 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/K2MultiplatformStructureTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/K2MultiplatformStructureTest.kt @@ -116,7 +116,6 @@ class K2MultiplatformStructureTest { /* check dependsOnEdges */ assertEquals( setOf( - RefinesEdge(defaultSourceSet.name, "commonMain"), RefinesEdge(defaultSourceSet.name, "intermediateMain"), RefinesEdge("intermediateMain", "commonMain") ), diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinTargetHierarchyDslTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinTargetHierarchyDslTest.kt index ca37ae646ce..1e11163a64f 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinTargetHierarchyDslTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/KotlinTargetHierarchyDslTest.kt @@ -55,48 +55,12 @@ class KotlinTargetHierarchyDslTest { } assertEquals( - stringSetOf( - "androidNativeArm32Main", - "androidNativeArm64Main", - "iosArm32Main", - "iosArm64Main", - "iosSimulatorArm64Main", - "iosX64Main", - "linuxArm32HfpMain", - "linuxX64Main", - "macosArm64Main", - "macosX64Main", - "mingwX64Main", - "mingwX86Main", - "nativeMain", - "tvosArm64Main", - "tvosX64Main", - "watchosArm32Main", - "watchosArm64Main" - ), + stringSetOf("nativeMain"), kotlin.dependingSourceSetNames("commonMain") ) assertEquals( - stringSetOf( - "androidNativeArm32Test", - "androidNativeArm64Test", - "iosArm32Test", - "iosArm64Test", - "iosSimulatorArm64Test", - "iosX64Test", - "linuxArm32HfpTest", - "linuxX64Test", - "macosArm64Test", - "macosX64Test", - "mingwX64Test", - "mingwX86Test", - "nativeTest", - "tvosArm64Test", - "tvosX64Test", - "watchosArm32Test", - "watchosArm64Test" - ), kotlin.dependingSourceSetNames("commonTest") + stringSetOf("nativeTest"), kotlin.dependingSourceSetNames("commonTest") ) assertEquals( @@ -222,7 +186,7 @@ class KotlinTargetHierarchyDslTest { project.evaluate() assertEquals( - stringSetOf("androidDebug", "androidMain", "androidRelease", "jvmAndAndroidMain", "jvmMain"), + stringSetOf("jvmAndAndroidMain"), kotlin.dependingSourceSetNames("commonMain") ) @@ -232,7 +196,7 @@ class KotlinTargetHierarchyDslTest { ) assertEquals( - stringSetOf("jvmAndAndroidTest", "jvmTest", "androidUnitTest", "androidUnitTestDebug", "androidUnitTestRelease"), + stringSetOf("jvmAndAndroidTest"), kotlin.dependingSourceSetNames("commonTest") ) @@ -270,7 +234,7 @@ class KotlinTargetHierarchyDslTest { } assertEquals( - stringSetOf("baseMain", "linuxX64Main"), kotlin.dependingSourceSetNames("commonMain") + stringSetOf("baseMain"), kotlin.dependingSourceSetNames("commonMain") ) assertEquals( @@ -306,7 +270,7 @@ class KotlinTargetHierarchyDslTest { kotlin.mingwX64() assertEquals( - stringSetOf("nativeMain", "nixMain", "linuxX64Main", "macosX64Main", "mingwX64Main"), + stringSetOf("nativeMain", "nixMain"), kotlin.dependingSourceSetNames("commonMain") ) @@ -336,7 +300,7 @@ class KotlinTargetHierarchyDslTest { kotlin.js() assertEquals( - stringSetOf("webMain", "jsMain", "wasmMain"), + stringSetOf("webMain"), kotlin.dependingSourceSetNames("commonMain") ) @@ -367,7 +331,7 @@ class KotlinTargetHierarchyDslTest { kotlin.linuxX64() assertEquals( - stringSetOf("jsAndJvmMain", "wasmAndLinuxMain", "jvmMain", "linuxX64Main", "jsMain", "wasmMain"), + stringSetOf("jsAndJvmMain", "wasmAndLinuxMain"), kotlin.dependingSourceSetNames("commonMain") ) @@ -408,7 +372,7 @@ class KotlinTargetHierarchyDslTest { ) assertEquals( - stringSetOf("baseMain", "linuxX64Main"), kotlin.dependingSourceSetNames("commonMain") + stringSetOf("baseMain"), kotlin.dependingSourceSetNames("commonMain") ) assertEquals( diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/SourceSetCommonizerTargetTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/SourceSetCommonizerTargetTest.kt index 28fc3c79e5d..5c0748c4c88 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/SourceSetCommonizerTargetTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/SourceSetCommonizerTargetTest.kt @@ -9,6 +9,7 @@ package org.jetbrains.kotlin.gradle.unitTests import org.gradle.api.Project +import org.gradle.api.internal.project.ProjectInternal import org.gradle.api.plugins.ExtraPropertiesExtension import org.gradle.testfixtures.ProjectBuilder import org.jetbrains.kotlin.commonizer.CommonizerTarget @@ -17,6 +18,7 @@ import org.jetbrains.kotlin.commonizer.SharedCommonizerTarget import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.targets.native.internal.getCommonizerTarget import org.jetbrains.kotlin.gradle.util.addBuildEventsListenerRegistryMock +import org.jetbrains.kotlin.gradle.util.buildProject import org.jetbrains.kotlin.konan.target.KonanTarget.* import kotlin.test.BeforeTest import kotlin.test.Test @@ -25,12 +27,12 @@ import kotlin.test.assertNull class SourceSetCommonizerTargetTest { - private lateinit var project: Project + private lateinit var project: ProjectInternal private lateinit var kotlin: KotlinMultiplatformExtension @BeforeTest fun setup() { - project = ProjectBuilder.builder().build() + project = buildProject() addBuildEventsListenerRegistryMock(project) project.extensions.getByType(ExtraPropertiesExtension::class.java).set("kotlin.mpp.enableCompatibilityMetadataVariant", "false") project.plugins.apply("kotlin-multiplatform") @@ -54,6 +56,8 @@ class SourceSetCommonizerTargetTest { assertEquals(CommonizerTarget(LINUX_X64), getCommonizerTarget(linuxTest)) assertEquals(CommonizerTarget(MACOS_X64), getCommonizerTarget(macosMain)) assertEquals(CommonizerTarget(MACOS_X64), getCommonizerTarget(macosTest)) + + project.evaluate() assertEquals(CommonizerTarget(LINUX_X64, MACOS_X64), getCommonizerTarget(commonMain)) assertEquals(CommonizerTarget(LINUX_X64, MACOS_X64), getCommonizerTarget(commonTest)) } @@ -75,12 +79,15 @@ class SourceSetCommonizerTargetTest { linuxMain.dependsOn(nativeMain) macosMain.dependsOn(nativeMain) + assertEquals(CommonizerTarget(LINUX_X64), getCommonizerTarget(linuxMain)) assertEquals(CommonizerTarget(LINUX_X64), getCommonizerTarget(linuxTest)) assertEquals(CommonizerTarget(MACOS_X64), getCommonizerTarget(macosMain)) assertEquals(CommonizerTarget(MACOS_X64), getCommonizerTarget(macosTest)) assertEquals(CommonizerTarget(LINUX_X64, MACOS_X64), getCommonizerTarget(nativeMain)) + + project.evaluate() assertEquals(CommonizerTarget(LINUX_X64, MACOS_X64), getCommonizerTarget(commonMain)) assertEquals(CommonizerTarget(LINUX_X64, MACOS_X64), getCommonizerTarget(commonTest)) } @@ -108,6 +115,8 @@ class SourceSetCommonizerTargetTest { assertEquals(LeafCommonizerTarget(LINUX_X64), getCommonizerTarget(linuxBTest)) assertEquals(LeafCommonizerTarget(LINUX_X64), getCommonizerTarget(nativeMain)) + + project.evaluate() assertEquals(LeafCommonizerTarget(LINUX_X64), getCommonizerTarget(commonMain)) assertEquals(LeafCommonizerTarget(LINUX_X64), getCommonizerTarget(commonTest)) } @@ -153,6 +162,9 @@ class SourceSetCommonizerTargetTest { CommonizerTarget(IOS_X64, IOS_ARM64, MACOS_X64, LINUX_X64), getCommonizerTarget(nativeMain) ) + + project.evaluate() + assertEquals( CommonizerTarget(IOS_X64, IOS_ARM64, MACOS_X64, LINUX_X64), getCommonizerTarget(commonMain) @@ -193,6 +205,7 @@ class SourceSetCommonizerTargetTest { assertEquals(CommonizerTarget(LINUX_X64, MACOS_X64), getCommonizerTarget(nativeMain)) + project.evaluate() assertNull(getCommonizerTarget(commonMain), "Expected commonMain to have no commonizer target") assertNull(getCommonizerTarget(commonTest), "Expected commonTest to have no commonizer target") } diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/sources/InternalKotlinSourceSetTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/sources/InternalKotlinSourceSetTest.kt index de5922283e4..58c979f80a7 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/sources/InternalKotlinSourceSetTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/sources/InternalKotlinSourceSetTest.kt @@ -9,7 +9,9 @@ package org.jetbrains.kotlin.gradle.unitTests.sources import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation +import org.jetbrains.kotlin.gradle.plugin.KotlinMultiplatformPluginLifecycle import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet +import org.jetbrains.kotlin.gradle.plugin.enqueue import org.jetbrains.kotlin.gradle.plugin.mpp.getHostSpecificMainSharedSourceSets import org.jetbrains.kotlin.gradle.plugin.sources.InternalKotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.sources.internal @@ -47,7 +49,7 @@ class InternalKotlinSourceSetTest { nativeMain.dependsOn(commonMain) assertEquals>>( - setOf(metadataCompilation, jvmCompilation, linuxCompilation, macosCompilation), + setOf(metadataCompilation), commonMain.internal.compilations ) @@ -67,6 +69,20 @@ class InternalKotlinSourceSetTest { setOf(linuxCompilation, macosCompilation), nativeMain.internal.compilations ) + + project.enqueue(KotlinMultiplatformPluginLifecycle.Stage.Finalised) { + assertEquals>>( + setOf( + metadataCompilation, + kotlin.metadata().compilations.getByName("commonMain"), + kotlin.metadata().compilations.getByName("nativeMain"), + jvmCompilation, linuxCompilation, macosCompilation + ), + commonMain.internal.compilations + ) + } + + project.evaluate() } @Test @@ -80,6 +96,7 @@ class InternalKotlinSourceSetTest { val nativeMain = kotlin.sourceSets.create("nativeMain") val linuxMain = kotlin.sourceSets.create("linuxMain") val linuxX64Main = kotlin.sourceSets.getByName("linuxX64Main") + linuxX64Main.dependsOn(commonMain) assertEquals( setOf(commonMain, linuxX64Main), diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/sources/SourceSetVisibilityInferenceTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/sources/SourceSetVisibilityInferenceTest.kt index 7e36b0c425a..61a5668c44e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/sources/SourceSetVisibilityInferenceTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/sources/SourceSetVisibilityInferenceTest.kt @@ -22,7 +22,9 @@ import kotlin.test.assertNotNull class SourceSetVisibilityInferenceTest { private val project = buildProjectWithMPP() - private val kotlin = project.multiplatformExtension + private val kotlin = project.multiplatformExtension.apply { + targetHierarchy.default() + } @Test fun testBasicSuccessful() {