[MPP] Declare import resolver dependencies on tasks

KT-54975
This commit is contained in:
Pavel Kirpichenkov
2022-12-16 17:32:39 +02:00
committed by Space Team
parent 8bdd9b3837
commit 8a83870306
5 changed files with 39 additions and 9 deletions
@@ -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")))
)
}
@@ -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<IdeaKotlinDependency> {
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<Any> {
return project.multiplatformExtension.sourceSets
.filterIsInstance<DefaultKotlinSourceSet>()
.filter { getCommonizerTarget(it) is SharedCommonizerTarget }
.mapNotNull { project.locateDependencyTask(it) }
}
private fun Project.locateDependencyTask(sourceSet: DefaultKotlinSourceSet): TaskProvider<*>? =
locateTask<CInteropMetadataDependencyTransformationTask>(sourceSet.cinteropMetadataDependencyTransformationForIdeTaskName)
}
@@ -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<IdeaKotlinDependency> {
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<Any> {
return listOfNotNull(project.copyCommonizeCInteropForIdeTask)
}
}
@@ -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
@@ -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<CInteropMetadataDependencyTransformationTask>? {
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)