diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/MppIdeDependencyResolutionIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/MppIdeDependencyResolutionIT.kt index 4039e80b350..f47ab369cd9 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/MppIdeDependencyResolutionIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/MppIdeDependencyResolutionIT.kt @@ -92,9 +92,6 @@ class MppIdeDependencyResolutionIT : KGPBaseTest() { project(projectName = "cinteropImport", gradleVersion = gradleVersion) { build(":dep-with-cinterop:publishToMavenLocal") -// build(":prepareKotlinIdeaImport") -// build("copyCommonizeCInteropForIde") -// build(":clientForBinaryDep:transformCommonMainCInteropDependenciesMetadataForIde") resolveIdeDependencies("dep-with-cinterop") { dependencies -> val commonMainDependencies = dependencies["commonMain"].cinteropDependencies() @@ -125,6 +122,7 @@ class MppIdeDependencyResolutionIT : KGPBaseTest() { for (commonDeps in listOf(commonMainDependencies, commonTestDependencies)) { commonDeps.assertMatches( + commonDeps.assertMatches(binaryCoordinates(Regex("a:dep.*linux_arm64, linux_x64"))) ) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeCInteropMetadataDependencyClasspathResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeCInteropMetadataDependencyClasspathResolver.kt index 84df2ed224f..1804eb571fe 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeCInteropMetadataDependencyClasspathResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeCInteropMetadataDependencyClasspathResolver.kt @@ -5,19 +5,38 @@ package org.jetbrains.kotlin.gradle.plugin.ide.dependencyResolvers +import org.gradle.api.Project +import org.gradle.api.tasks.TaskProvider +import org.jetbrains.kotlin.commonizer.SharedCommonizerTarget +import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinDependency import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.ide.IdeDependencyResolver import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSet +import org.jetbrains.kotlin.gradle.targets.native.internal.CInteropMetadataDependencyTransformationTask +import org.jetbrains.kotlin.gradle.targets.native.internal.cinteropMetadataDependencyTransformationForIdeTaskName import org.jetbrains.kotlin.gradle.targets.native.internal.createCInteropMetadataDependencyClasspathForIde +import org.jetbrains.kotlin.gradle.targets.native.internal.getCommonizerTarget +import org.jetbrains.kotlin.gradle.tasks.locateTask -object IdeCInteropMetadataDependencyClasspathResolver : IdeDependencyResolver { +object IdeCInteropMetadataDependencyClasspathResolver : IdeDependencyResolver, IdeDependencyResolver.WithBuildDependencies { override fun resolve(sourceSet: KotlinSourceSet): Set { if (sourceSet !is DefaultKotlinSourceSet) return emptySet() val project = sourceSet.project - // TODO (kirpichenkov): sensitive to task being registered for the source set + project.locateDependencyTask(sourceSet) ?: return emptySet() + val cinteropFiles = project.createCInteropMetadataDependencyClasspathForIde(sourceSet) return resolveCinteropDependencies(project, cinteropFiles) } + + override fun dependencies(project: Project): Iterable { + return project.multiplatformExtension.sourceSets + .filterIsInstance() + .filter { getCommonizerTarget(it) is SharedCommonizerTarget } + .mapNotNull { project.locateDependencyTask(it) } + } + + private fun Project.locateDependencyTask(sourceSet: DefaultKotlinSourceSet): TaskProvider<*>? = + locateTask(sourceSet.cinteropMetadataDependencyTransformationForIdeTaskName) } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeCommonizedCinteropDependencyResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeCommonizedCinteropDependencyResolver.kt index b9b14539756..99da01ed385 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeCommonizedCinteropDependencyResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeCommonizedCinteropDependencyResolver.kt @@ -5,13 +5,15 @@ package org.jetbrains.kotlin.gradle.plugin.ide.dependencyResolvers +import org.gradle.api.Project import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinDependency import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.ide.IdeDependencyResolver import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSet import org.jetbrains.kotlin.gradle.targets.native.internal.cinteropCommonizerDependencies +import org.jetbrains.kotlin.gradle.targets.native.internal.copyCommonizeCInteropForIdeTask -object IdeCommonizedCinteropDependencyResolver : IdeDependencyResolver { +object IdeCommonizedCinteropDependencyResolver : IdeDependencyResolver, IdeDependencyResolver.WithBuildDependencies { override fun resolve(sourceSet: KotlinSourceSet): Set { if (sourceSet !is DefaultKotlinSourceSet) return emptySet() @@ -19,4 +21,8 @@ object IdeCommonizedCinteropDependencyResolver : IdeDependencyResolver { val cinteropFiles = project.cinteropCommonizerDependencies(sourceSet) return resolveCinteropDependencies(project, cinteropFiles) } + + override fun dependencies(project: Project): Iterable { + return listOfNotNull(project.copyCommonizeCInteropForIdeTask) + } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeProjectToProjectCInteropDependencyResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeProjectToProjectCInteropDependencyResolver.kt index 0bef866e134..168e046f7c5 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeProjectToProjectCInteropDependencyResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeProjectToProjectCInteropDependencyResolver.kt @@ -11,7 +11,7 @@ import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.ide.IdeDependencyResolver object IdeProjectToProjectCInteropDependencyResolver : IdeDependencyResolver { - private val platformDependencyResolver = IdePlatformDependencyResolver( + private val platformDependencyResolver = IdeBinaryDependencyResolver( resolvedArtifactHandler = handler@{ artifact, context -> val identifier = artifact.id.componentIdentifier as? ProjectComponentIdentifier ?: return@handler null diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropMetadataDependencyTransformationTask.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropMetadataDependencyTransformationTask.kt index 74185191bf0..c18b40b8841 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropMetadataDependencyTransformationTask.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/targets/native/internal/CInteropMetadataDependencyTransformationTask.kt @@ -12,6 +12,7 @@ import org.gradle.api.artifacts.component.ProjectComponentIdentifier import org.gradle.api.file.FileCollection import org.gradle.api.tasks.* import org.jetbrains.kotlin.commonizer.SharedCommonizerTarget +import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.PropertiesProvider.Companion.kotlinPropertiesProvider import org.jetbrains.kotlin.gradle.plugin.ide.Idea222Api import org.jetbrains.kotlin.gradle.plugin.ide.ideaImportDependsOn @@ -35,13 +36,19 @@ import java.io.Serializable import java.util.concurrent.Callable import javax.inject.Inject +internal val KotlinSourceSet.cinteropMetadataDependencyTransformationTaskName: String + get() = lowerCamelCaseName("transform", name, "CInteropDependenciesMetadata") + +internal val KotlinSourceSet.cinteropMetadataDependencyTransformationForIdeTaskName: String + get() = lowerCamelCaseName("transform", name, "CInteropDependenciesMetadataForIde") + internal fun Project.locateOrRegisterCInteropMetadataDependencyTransformationTask( sourceSet: DefaultKotlinSourceSet, ): TaskProvider? { if (!kotlinPropertiesProvider.enableCInteropCommonization) return null return locateOrRegisterTask( - lowerCamelCaseName("transform", sourceSet.name, "CInteropDependenciesMetadata"), + sourceSet.cinteropMetadataDependencyTransformationTaskName, args = listOf( sourceSet, /* outputDirectory = */ @@ -61,7 +68,7 @@ internal fun Project.locateOrRegisterCInteropMetadataDependencyTransformationTas if (!kotlinPropertiesProvider.enableCInteropCommonization) return null return locateOrRegisterTask( - lowerCamelCaseName("transform", sourceSet.name, "CInteropDependenciesMetadataForIde"), + sourceSet.cinteropMetadataDependencyTransformationForIdeTaskName, invokeWhenRegistered = { @OptIn(Idea222Api::class) ideaImportDependsOn(this)