Skip to content

Commit 21e3b1b

Browse files
antohabySpace Team
authored and
Space Team
committed
[Gradle] Include shared-test source sets dependencies to IDE resolver
It can happen that main source sets dont't have this dependency. As it was previously assumed. i.e. platform-only dependencies still should not be included as they can break on PSM artifact resolution. ^KT-75605 Verification Pending
1 parent 518b77c commit 21e3b1b

File tree

4 files changed

+63
-7
lines changed

4 files changed

+63
-7
lines changed

libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/MppIdeDependencyResolutionIT.kt

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import org.jetbrains.kotlin.gradle.idea.tcs.extras.*
1818
import org.jetbrains.kotlin.gradle.idea.testFixtures.tcs.*
1919
import org.jetbrains.kotlin.gradle.testbase.*
2020
import org.jetbrains.kotlin.gradle.util.*
21+
import org.jetbrains.kotlin.gradle.util.kotlinStdlibDependencies
2122
import org.jetbrains.kotlin.konan.target.HostManager
2223
import org.jetbrains.kotlin.konan.target.KonanTarget.*
2324
import org.junit.AssumptionViolatedException
@@ -502,6 +503,8 @@ class MppIdeDependencyResolutionIT : KGPBaseTest() {
502503

503504
resolveIdeDependencies { dependencies ->
504505
assertNoCompileTasksGotExecuted()
506+
dependencies.assertResolvedDependenciesOnly()
507+
505508
dependencies["jvmMain"].getOrFail(
506509
projectArtifactDependency(
507510
Regular,
@@ -536,6 +539,8 @@ class MppIdeDependencyResolutionIT : KGPBaseTest() {
536539

537540
resolveIdeDependencies { dependencies ->
538541
assertNoCompileTasksGotExecuted()
542+
dependencies.assertResolvedDependenciesOnly()
543+
539544
assertOutputDoesNotContain("e: org.jetbrains.kotlin.gradle.plugin.ide") // FIXME: KT-74976 Add strict mode for IDE dependency resolvers
540545
val expectedJvmDependencies = listOf(
541546
jetbrainsAnnotationDependencies,
@@ -567,6 +572,54 @@ class MppIdeDependencyResolutionIT : KGPBaseTest() {
567572
}
568573
}
569574

575+
@GradleTest
576+
fun `KT-75605 dependency to kmp project from test source set`(gradleVersion: GradleVersion) {
577+
project("base-kotlin-multiplatform-library", gradleVersion) {
578+
includeOtherProjectAsSubmodule("base-kotlin-multiplatform-library", newSubmoduleName = "test-utils") {
579+
buildScriptInjection {
580+
kotlinMultiplatform.apply {
581+
jvm()
582+
linuxX64()
583+
linuxArm64()
584+
iosX64()
585+
}
586+
}
587+
}
588+
589+
buildScriptInjection {
590+
kotlinMultiplatform.apply {
591+
jvm()
592+
linuxX64()
593+
linuxArm64()
594+
iosX64()
595+
596+
sourceSets.commonTest.dependencies {
597+
api(project(":test-utils"))
598+
}
599+
}
600+
}
601+
602+
resolveIdeDependencies { dependencies ->
603+
assertNoCompileTasksGotExecuted()
604+
dependencies.assertResolvedDependenciesOnly()
605+
606+
dependencies["commonTest"].assertMatches(
607+
friendSourceDependency(":/commonMain"),
608+
regularSourceDependency(":test-utils/commonMain"),
609+
kotlinStdlibDependencies
610+
)
611+
dependencies["nativeTest"].assertMatches(
612+
friendSourceDependency(":/commonMain"),
613+
friendSourceDependency(":/nativeMain"),
614+
dependsOnDependency(":/commonTest"),
615+
regularSourceDependency(":test-utils/commonMain"),
616+
regularSourceDependency(":test-utils/nativeMain"),
617+
kotlinNativeDistributionDependencies, // kotlin-stdlib is part of native distribution
618+
)
619+
}
620+
}
621+
}
622+
570623
private fun Iterable<IdeaKotlinDependency>.cinteropDependencies() =
571624
this.filterIsInstance<IdeaKotlinBinaryDependency>().filter {
572625
it.klibExtra?.isInterop == true && !it.isNativeStdlib && !it.isNativeDistribution

libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeVisibleMultiplatformSourceDependencyResolver.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
1414
import org.jetbrains.kotlin.gradle.plugin.ide.IdeDependencyResolver
1515
import org.jetbrains.kotlin.gradle.plugin.ide.IdeaKotlinProjectCoordinates
1616
import org.jetbrains.kotlin.gradle.plugin.mpp.MetadataDependencyResolution
17-
import org.jetbrains.kotlin.gradle.plugin.mpp.internal.psmArtifactsForAllDependencies
17+
import org.jetbrains.kotlin.gradle.plugin.mpp.internal.psmArtifactsForAllDependenciesFromSharedSourceSets
1818
import org.jetbrains.kotlin.gradle.plugin.mpp.projectDependency
1919
import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSet
2020
import org.jetbrains.kotlin.gradle.utils.future
@@ -52,6 +52,6 @@ internal object IdeVisibleMultiplatformSourceDependencyResolver : IdeDependencyR
5252
}
5353

5454
override fun dependencies(project: Project): Iterable<Any> {
55-
return project.future { project.psmArtifactsForAllDependencies() }.getOrThrow()
55+
return project.future { project.psmArtifactsForAllDependenciesFromSharedSourceSets() }.getOrThrow()
5656
}
5757
}

libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/mpp/internal/projectStructureMetadataConfiguration.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,10 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinProjectSetupAction
1414
import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider
1515
import org.jetbrains.kotlin.gradle.plugin.launch
1616
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinUsages
17-
import org.jetbrains.kotlin.gradle.plugin.mpp.kotlinMetadataCompilations
1817
import org.jetbrains.kotlin.gradle.plugin.mpp.resolvableMetadataConfiguration
1918
import org.jetbrains.kotlin.gradle.plugin.sources.InternalKotlinSourceSet
2019
import org.jetbrains.kotlin.gradle.plugin.sources.internal
20+
import org.jetbrains.kotlin.gradle.plugin.sources.isSharedSourceSet
2121
import org.jetbrains.kotlin.gradle.plugin.usageByName
2222
import org.jetbrains.kotlin.gradle.targets.metadata.locateOrRegisterGenerateProjectStructureMetadataTask
2323
import org.jetbrains.kotlin.gradle.utils.*
@@ -57,10 +57,11 @@ internal fun InternalKotlinSourceSet.projectStructureMetadataResolvedConfigurati
5757
}
5858
}
5959

60-
internal suspend fun Project.psmArtifactsForAllDependencies(): List<FileCollection> {
60+
internal suspend fun Project.psmArtifactsForAllDependenciesFromSharedSourceSets(): List<FileCollection> {
6161
if (!kotlinPropertiesProvider.kotlinKmpProjectIsolationEnabled) return emptyList()
62-
return multiplatformExtension.kotlinMetadataCompilations().map { compilation ->
63-
compilation.defaultSourceSet.internal.projectStructureMetadataResolvedConfiguration().files
62+
return multiplatformExtension.sourceSets.mapNotNull { sourceSet ->
63+
if (!sourceSet.internal.isSharedSourceSet()) return@mapNotNull null
64+
sourceSet.internal.projectStructureMetadataResolvedConfiguration().files
6465
}
6566
}
6667

libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/sources/InternalKotlinSourceSet.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,6 @@ internal interface InternalKotlinSourceSet : KotlinSourceSet {
2828
internal suspend fun InternalKotlinSourceSet.awaitPlatformCompilations(): Set<KotlinCompilation<*>> {
2929
KotlinPluginLifecycle.Stage.AfterFinaliseRefinesEdges.await()
3030
return compilations.filter { it !is KotlinMetadataCompilation }.toSet()
31-
}
31+
}
32+
33+
internal suspend fun InternalKotlinSourceSet.isSharedSourceSet() = awaitPlatformCompilations().size > 1

0 commit comments

Comments
 (0)