Draft of more refined import of compilations
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeJvmIncludedCompilationsResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeJvmIncludedCompilationsResolver.kt
new file mode 100644
index 0000000..733661f
--- /dev/null
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeJvmIncludedCompilationsResolver.kt
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
+ */
+
+package org.jetbrains.kotlin.gradle.plugin.ide.dependencyResolvers
+
+import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinDependency
+import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinSourceCoordinates
+import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinSourceDependency
+import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType
+import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
+import org.jetbrains.kotlin.gradle.plugin.ide.IdeDependencyResolver
+import org.jetbrains.kotlin.gradle.plugin.ide.IdeaKotlinProjectCoordinates
+import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmCompilation
+import org.jetbrains.kotlin.gradle.plugin.mpp.isMain
+import org.jetbrains.kotlin.gradle.plugin.sources.internal
+import org.jetbrains.kotlin.gradle.plugin.sources.project
+import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
+import org.jetbrains.kotlin.tooling.core.withClosure
+
+internal object IdeJvmIncludedCompilationsResolver : IdeDependencyResolver {
+ override fun resolve(sourceSet: KotlinSourceSet): Set<IdeaKotlinDependency> {
+ val compilation = sourceSet.internal.compilations.singleOrNull { it.platformType == KotlinPlatformType.jvm } ?: return emptySet()
+ if (!compilation.isMain()) return emptySet()
+ if (compilation !is KotlinJvmCompilation) return emptySet()
+
+ return resolve(compilation.target)
+ }
+
+ fun resolve(jvmTarget: KotlinJvmTarget): Set<IdeaKotlinSourceDependency> {
+ val result = jvmTarget.includedPublishableCompilations
+ .flatMap { it.allKotlinSourceSets }
+ .map { friendSourceSet ->
+ IdeaKotlinSourceDependency(
+ type = IdeaKotlinSourceDependency.Type.Friend,
+ coordinates = IdeaKotlinSourceCoordinates(
+ project = IdeaKotlinProjectCoordinates(friendSourceSet.project),
+ sourceSetName = friendSourceSet.name
+ )
+ )
+ }
+
+ return result.toSet()
+ }
+}
+
+private val KotlinJvmTarget.includedPublishableCompilations: List<KotlinJvmCompilation> get() {
+ val artifactsTask = project.tasks.getByName(artifactsTaskName)
+ // Here we assume that we get all participating compilations
+ val allTArtifactsDependencies = artifactsTask
+ .withClosure { it.taskDependencies.getDependencies(null) }
+ .map { it.name }
+
+ val compileTaskNameToCompilation = compilations.flatMap { compilation ->
+ listOfNotNull(
+ compilation.compileTaskProvider.name,
+ compilation.compileJavaTaskProvider?.name
+ ).map { it to compilation }
+ }.toMap()
+
+ return allTArtifactsDependencies.mapNotNull { compileTaskNameToCompilation[it] }
+}
\ No newline at end of file
diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTarget.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTarget.kt
index 40df670..ce0c570 100644
--- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTarget.kt
+++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/jvm/KotlinJvmTarget.kt
@@ -20,6 +20,7 @@
import org.gradle.util.GradleVersion
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
import org.jetbrains.kotlin.gradle.plugin.*
+import org.jetbrains.kotlin.gradle.plugin.ide.dependencyResolvers.IdeJvmIncludedCompilationsResolver
import org.jetbrains.kotlin.gradle.plugin.internal.JavaSourceSetsAccessor
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmCompilation
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinOnlyTarget
@@ -104,6 +105,11 @@
disableJavaPluginTasks(javaSourceSets)
}
+ val sourceSetsFromIncludedCompilations: Set<String> get() = IdeJvmIncludedCompilationsResolver
+ .resolve(this)
+ .map { it.coordinates.sourceSetName }
+ .toSet()
+
private fun setupJavaSourceSetSourcesAndResources(
javaSourceSet: SourceSet,
compilation: KotlinJvmCompilation