From d6f9e625652cdbc7ce47a7da493fa3f5d05b5cb4 Mon Sep 17 00:00:00 2001 From: Sebastian Sellmair Date: Mon, 28 Nov 2022 17:20:10 +0100 Subject: [PATCH] [Gradle] Constraint IdeVisibleMultiplatformSourceDependencyResolver to non-leaf source sets ^KT-55112 Verification Pending --- .../gradle/plugin/ide/IdeMultiplatformImport.kt | 12 +++++++++--- .../plugin/ide/IdeMultiplatformImportFactory.kt | 8 ++++---- .../gradle/ide/IdeResolveSourceDependenciesTest.kt | 12 ------------ 3 files changed, 13 insertions(+), 19 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport.kt index af577749c49..d8ad7e111c7 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImport.kt @@ -9,6 +9,7 @@ package org.jetbrains.kotlin.gradle.plugin.ide import org.gradle.api.Project import org.jetbrains.kotlin.gradle.ExternalKotlinTargetApi 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.IdeaKotlinExtrasSerializationExtensionBuilder 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.Overwrite 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.project import org.jetbrains.kotlin.gradle.targets.metadata.isNativeSourceSet import org.jetbrains.kotlin.gradle.utils.getOrPut import org.jetbrains.kotlin.tooling.core.Extras @@ -139,9 +140,14 @@ interface IdeMultiplatformImport { companion object { val unconstrained = SourceSetConstraint { true } + 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 -> sourceSet.internal.compilations.map { it.platformType }.toSet() == setOf(jvm, androidJvm) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImportFactory.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImportFactory.kt index 443c09ec1ec..3a61b5a9332 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImportFactory.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/IdeMultiplatformImportFactory.kt @@ -32,7 +32,7 @@ fun IdeMultiplatformImport(extension: KotlinMultiplatformExtension): IdeMultipla registerDependencyResolver( resolver = IdeVisibleMultiplatformSourceDependencyResolver, - constraint = SourceSetConstraint.unconstrained, + constraint = !SourceSetConstraint.isLeaf, phase = IdeMultiplatformImport.DependencyResolutionPhase.SourceDependencyResolution, level = IdeMultiplatformImport.DependencyResolutionLevel.Default ) @@ -46,21 +46,21 @@ fun IdeMultiplatformImport(extension: KotlinMultiplatformExtension): IdeMultipla registerDependencyResolver( resolver = IdeTransformedMetadataDependencyResolver, - constraint = SourceSetConstraint.isMetadata, + constraint = !SourceSetConstraint.isLeaf, phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution, level = IdeMultiplatformImport.DependencyResolutionLevel.Default ) registerDependencyResolver( resolver = IdeOriginalMetadataDependencyResolver, - constraint = SourceSetConstraint.isMetadata, + constraint = !SourceSetConstraint.isLeaf, phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution, level = IdeMultiplatformImport.DependencyResolutionLevel.Default, ) registerDependencyResolver( resolver = IdePlatformDependencyResolver(), - constraint = SourceSetConstraint.isPlatform, + constraint = SourceSetConstraint.isLeaf, phase = IdeMultiplatformImport.DependencyResolutionPhase.BinaryDependencyResolution, level = IdeMultiplatformImport.DependencyResolutionLevel.Default ) diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/ide/IdeResolveSourceDependenciesTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/ide/IdeResolveSourceDependenciesTest.kt index b8b9b93d3a4..a17338aa296 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/ide/IdeResolveSourceDependenciesTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/ide/IdeResolveSourceDependenciesTest.kt @@ -95,9 +95,6 @@ class IdeResolveSourceDependenciesTest { ) consumer.resolveDependencies("linuxX64Main").assertMatches( - regularSourceDependency(":producer/commonMain"), - regularSourceDependency(":producer/nativeMain"), - regularSourceDependency(":producer/linuxMain"), dependsOnDependency(":consumer/commonMain"), dependsOnDependency(":consumer/nativeMain"), dependsOnDependency(":consumer/linuxMain"), @@ -105,9 +102,6 @@ class IdeResolveSourceDependenciesTest { ) consumer.resolveDependencies("linuxX64Test").assertMatches( - regularSourceDependency(":producer/commonMain"), - regularSourceDependency(":producer/nativeMain"), - regularSourceDependency(":producer/linuxMain"), friendSourceDependency(":consumer/commonMain"), friendSourceDependency(":consumer/nativeMain"), friendSourceDependency(":consumer/linuxMain"), @@ -119,9 +113,6 @@ class IdeResolveSourceDependenciesTest { ) consumer.resolveDependencies("linuxArm64Main").assertMatches( - regularSourceDependency(":producer/commonMain"), - regularSourceDependency(":producer/nativeMain"), - regularSourceDependency(":producer/linuxMain"), dependsOnDependency(":consumer/commonMain"), dependsOnDependency(":consumer/nativeMain"), dependsOnDependency(":consumer/linuxMain"), @@ -129,9 +120,6 @@ class IdeResolveSourceDependenciesTest { ) consumer.resolveDependencies("linuxArm64Test").assertMatches( - regularSourceDependency(":producer/commonMain"), - regularSourceDependency(":producer/nativeMain"), - regularSourceDependency(":producer/linuxMain"), friendSourceDependency(":consumer/commonMain"), friendSourceDependency(":consumer/nativeMain"), friendSourceDependency(":consumer/linuxMain"),