[Gradle] Keep stdlib-common for shared native source sets

^KT-56278 Verification Pending
This commit is contained in:
Sebastian Sellmair
2023-01-30 10:27:30 +01:00
committed by Space Team
parent 090a58ccc4
commit 35c0a3d391
5 changed files with 29 additions and 6 deletions
@@ -34,7 +34,8 @@ class MppCompositeBuildIT : KGPBaseTest() {
regularSourceDependency("producerBuild::producerA/commonMain"),
regularSourceDependency("producerBuild::producerA/nativeMain"),
regularSourceDependency("producerBuild::producerA/linuxMain"),
kotilnNativeDistributionDependencies
kotilnNativeDistributionDependencies,
binaryCoordinates(Regex(".*stdlib-common:.*")) /* KT-56278 */
)
dependencies["linuxMain"].assertMatches(
@@ -47,7 +48,7 @@ class MppCompositeBuildIT : KGPBaseTest() {
dependsOnDependency(":consumerA/nativeMain"),
dependsOnDependency(":consumerA/linuxMain"),
projectArtifactDependency(Regular, "producerBuild::producerA", FilePathRegex(".*/linuxX64/main/klib/producerA.klib")),
kotilnNativeDistributionDependencies
kotilnNativeDistributionDependencies,
)
}
}
@@ -21,6 +21,7 @@ import org.jetbrains.kotlin.gradle.plugin.extraProperties
import org.jetbrains.kotlin.gradle.plugin.ide.IdeMultiplatformImport.DependencyResolutionLevel.Default
import org.jetbrains.kotlin.gradle.plugin.ide.IdeMultiplatformImport.DependencyResolutionLevel.Overwrite
import org.jetbrains.kotlin.gradle.plugin.ide.IdeMultiplatformImport.SourceSetConstraint
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeCompilation
import org.jetbrains.kotlin.gradle.plugin.sources.internal
import org.jetbrains.kotlin.gradle.plugin.sources.project
import org.jetbrains.kotlin.gradle.targets.metadata.isNativeSourceSet
@@ -176,6 +177,12 @@ interface IdeMultiplatformImport {
val isNative = SourceSetConstraint { isNativeSourceSet(it) }
val isSharedNative = isNative and SourceSetConstraint { sourceSet ->
sourceSet.internal.compilations.filterIsInstance<KotlinNativeCompilation>()
.map { compilation -> compilation.konanTarget }
.toSet().size > 1
}
val isSinglePlatformType = SourceSetConstraint { isSinglePlatformTypeSourceSet(it) }
val isSingleKotlinTarget = SourceSetConstraint { isSingleKotlinTargetSourceSet(it) }
@@ -150,7 +150,7 @@ internal fun IdeMultiplatformImport(extension: KotlinProjectExtension): IdeMulti
registerDependencyTransformer(
transformer = IdePlatformStdlibCommonDependencyFilter,
constraint = SourceSetConstraint.isSinglePlatformType,
constraint = SourceSetConstraint.isSinglePlatformType and !SourceSetConstraint.isSharedNative,
phase = IdeMultiplatformImport.DependencyTransformationPhase.DependencyFilteringPhase,
)
@@ -82,7 +82,8 @@ class IdeSourcesAndDocumentationResolutionTest {
binaryCoordinates("com.arkivanov.mvikotlin:mvikotlin:3.0.2:jsNativeMain"),
binaryCoordinates("com.arkivanov.essenty:lifecycle:0.4.2:commonMain"),
binaryCoordinates("com.arkivanov.essenty:instance-keeper:0.4.2:commonMain"),
IdeNativeStdlibDependencyResolver.nativeStdlibCoordinates(project)
IdeNativeStdlibDependencyResolver.nativeStdlibCoordinates(project),
binaryCoordinates(Regex(".*stdlib-common:.*")) /* KT-56278 */
)
val resolvedDependencies = resolveDependencySources(nativeMain)
@@ -175,8 +175,22 @@ class IdeStdlibResolutionTest {
project.evaluate()
project.assertStdlibDependencies(linuxSharedMain, nativeStdlibDependency(kotlin))
project.assertStdlibDependencies(linuxSharedTest, nativeStdlibDependency(kotlin))
project.assertStdlibDependencies(
linuxSharedMain, listOf(
nativeStdlibDependency(kotlin),
/* See: KT-56278: We still need stdlib-common for shared native source sets */
commonStdlibDependency(kotlin)
)
)
project.assertStdlibDependencies(
linuxSharedTest, listOf(
nativeStdlibDependency(kotlin),
/* See: KT-56278: We still need stdlib-common for shared native source sets */
commonStdlibDependency(kotlin)
)
)
}
@Test