[Gradle] Constraint IdeVisibleMultiplatformSourceDependencyResolver to non-leaf source sets

^KT-55112 Verification Pending
This commit is contained in:
Sebastian Sellmair
2022-11-28 17:20:10 +01:00
committed by Space Team
parent 2f5dc93ba7
commit d6f9e62565
3 changed files with 13 additions and 19 deletions
@@ -9,6 +9,7 @@ package org.jetbrains.kotlin.gradle.plugin.ide
import org.gradle.api.Project import org.gradle.api.Project
import org.jetbrains.kotlin.gradle.ExternalKotlinTargetApi import org.jetbrains.kotlin.gradle.ExternalKotlinTargetApi
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtensionOrNull
import org.jetbrains.kotlin.gradle.idea.serialize.IdeaKotlinExtrasSerializationExtension import org.jetbrains.kotlin.gradle.idea.serialize.IdeaKotlinExtrasSerializationExtension
import org.jetbrains.kotlin.gradle.idea.serialize.IdeaKotlinExtrasSerializationExtensionBuilder import org.jetbrains.kotlin.gradle.idea.serialize.IdeaKotlinExtrasSerializationExtensionBuilder
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinDependency import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinDependency
@@ -19,8 +20,8 @@ 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.Default
import org.jetbrains.kotlin.gradle.plugin.ide.IdeMultiplatformImport.DependencyResolutionLevel.Overwrite 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.ide.IdeMultiplatformImport.SourceSetConstraint
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMetadataCompilation
import org.jetbrains.kotlin.gradle.plugin.sources.internal import org.jetbrains.kotlin.gradle.plugin.sources.internal
import org.jetbrains.kotlin.gradle.plugin.sources.project
import org.jetbrains.kotlin.gradle.targets.metadata.isNativeSourceSet import org.jetbrains.kotlin.gradle.targets.metadata.isNativeSourceSet
import org.jetbrains.kotlin.gradle.utils.getOrPut import org.jetbrains.kotlin.gradle.utils.getOrPut
import org.jetbrains.kotlin.tooling.core.Extras import org.jetbrains.kotlin.tooling.core.Extras
@@ -139,9 +140,14 @@ interface IdeMultiplatformImport {
companion object { companion object {
val unconstrained = SourceSetConstraint { true } val unconstrained = SourceSetConstraint { true }
val isNative = SourceSetConstraint { sourceSet -> isNativeSourceSet(sourceSet) } val isNative = SourceSetConstraint { sourceSet -> isNativeSourceSet(sourceSet) }
val isMetadata = SourceSetConstraint { sourceSet -> sourceSet.internal.compilations.any { it is KotlinMetadataCompilation } }
val isPlatform = !isMetadata and SourceSetConstraint { sourceSet -> sourceSet.internal.compilations.any() } val isLeaf = SourceSetConstraint { sourceSet ->
(sourceSet.project.multiplatformExtensionOrNull ?: return@SourceSetConstraint true).sourceSets
.none { otherSourceSet -> sourceSet in otherSourceSet.dependsOn }
}
val isJvmAndAndroid = SourceSetConstraint { sourceSet -> val isJvmAndAndroid = SourceSetConstraint { sourceSet ->
sourceSet.internal.compilations.map { it.platformType }.toSet() == setOf(jvm, androidJvm) sourceSet.internal.compilations.map { it.platformType }.toSet() == setOf(jvm, androidJvm)
} }
@@ -32,7 +32,7 @@ fun IdeMultiplatformImport(extension: KotlinMultiplatformExtension): IdeMultipla
registerDependencyResolver( registerDependencyResolver(
resolver = IdeVisibleMultiplatformSourceDependencyResolver, resolver = IdeVisibleMultiplatformSourceDependencyResolver,
constraint = SourceSetConstraint.unconstrained, constraint = !SourceSetConstraint.isLeaf,
phase = IdeMultiplatformImport.DependencyResolutionPhase.SourceDependencyResolution, phase = IdeMultiplatformImport.DependencyResolutionPhase.SourceDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default level = IdeMultiplatformImport.DependencyResolutionLevel.Default
) )
@@ -46,21 +46,21 @@ fun IdeMultiplatformImport(extension: KotlinMultiplatformExtension): IdeMultipla
registerDependencyResolver( registerDependencyResolver(
resolver = IdeTransformedMetadataDependencyResolver, resolver = IdeTransformedMetadataDependencyResolver,
constraint = SourceSetConstraint.isMetadata, constraint = !SourceSetConstraint.isLeaf,
phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution, phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default level = IdeMultiplatformImport.DependencyResolutionLevel.Default
) )
registerDependencyResolver( registerDependencyResolver(
resolver = IdeOriginalMetadataDependencyResolver, resolver = IdeOriginalMetadataDependencyResolver,
constraint = SourceSetConstraint.isMetadata, constraint = !SourceSetConstraint.isLeaf,
phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution, phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default, level = IdeMultiplatformImport.DependencyResolutionLevel.Default,
) )
registerDependencyResolver( registerDependencyResolver(
resolver = IdePlatformDependencyResolver(), resolver = IdePlatformDependencyResolver(),
constraint = SourceSetConstraint.isPlatform, constraint = SourceSetConstraint.isLeaf,
phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution, phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution,
level = IdeMultiplatformImport.DependencyResolutionLevel.Default level = IdeMultiplatformImport.DependencyResolutionLevel.Default
) )
@@ -95,9 +95,6 @@ class IdeResolveSourceDependenciesTest {
) )
consumer.resolveDependencies("linuxX64Main").assertMatches( consumer.resolveDependencies("linuxX64Main").assertMatches(
regularSourceDependency(":producer/commonMain"),
regularSourceDependency(":producer/nativeMain"),
regularSourceDependency(":producer/linuxMain"),
dependsOnDependency(":consumer/commonMain"), dependsOnDependency(":consumer/commonMain"),
dependsOnDependency(":consumer/nativeMain"), dependsOnDependency(":consumer/nativeMain"),
dependsOnDependency(":consumer/linuxMain"), dependsOnDependency(":consumer/linuxMain"),
@@ -105,9 +102,6 @@ class IdeResolveSourceDependenciesTest {
) )
consumer.resolveDependencies("linuxX64Test").assertMatches( consumer.resolveDependencies("linuxX64Test").assertMatches(
regularSourceDependency(":producer/commonMain"),
regularSourceDependency(":producer/nativeMain"),
regularSourceDependency(":producer/linuxMain"),
friendSourceDependency(":consumer/commonMain"), friendSourceDependency(":consumer/commonMain"),
friendSourceDependency(":consumer/nativeMain"), friendSourceDependency(":consumer/nativeMain"),
friendSourceDependency(":consumer/linuxMain"), friendSourceDependency(":consumer/linuxMain"),
@@ -119,9 +113,6 @@ class IdeResolveSourceDependenciesTest {
) )
consumer.resolveDependencies("linuxArm64Main").assertMatches( consumer.resolveDependencies("linuxArm64Main").assertMatches(
regularSourceDependency(":producer/commonMain"),
regularSourceDependency(":producer/nativeMain"),
regularSourceDependency(":producer/linuxMain"),
dependsOnDependency(":consumer/commonMain"), dependsOnDependency(":consumer/commonMain"),
dependsOnDependency(":consumer/nativeMain"), dependsOnDependency(":consumer/nativeMain"),
dependsOnDependency(":consumer/linuxMain"), dependsOnDependency(":consumer/linuxMain"),
@@ -129,9 +120,6 @@ class IdeResolveSourceDependenciesTest {
) )
consumer.resolveDependencies("linuxArm64Test").assertMatches( consumer.resolveDependencies("linuxArm64Test").assertMatches(
regularSourceDependency(":producer/commonMain"),
regularSourceDependency(":producer/nativeMain"),
regularSourceDependency(":producer/linuxMain"),
friendSourceDependency(":consumer/commonMain"), friendSourceDependency(":consumer/commonMain"),
friendSourceDependency(":consumer/nativeMain"), friendSourceDependency(":consumer/nativeMain"),
friendSourceDependency(":consumer/linuxMain"), friendSourceDependency(":consumer/linuxMain"),