From b659778b2fa868d203664f3094f656678cd58c81 Mon Sep 17 00:00:00 2001 From: Sebastian Sellmair Date: Wed, 7 Dec 2022 11:44:28 +0100 Subject: [PATCH] [Gradle] Implement IdeMetadataSourcesResolver by resolving 'resolvableMetadataConfiguration' ^KT-55289 Verification Pending --- .../IdeBinaryDependencyResolver.kt | 24 ++++++++++++++++++- .../IdeMetadataSourcesResolver.kt | 11 ++++----- .../IdePlatformSourcesResolver.kt | 1 - 3 files changed, 27 insertions(+), 9 deletions(-) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeBinaryDependencyResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeBinaryDependencyResolver.kt index 21c25d6555b..909840a8fb6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeBinaryDependencyResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeBinaryDependencyResolver.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.gradle.plugin.ide.dependencyResolvers import org.gradle.api.artifacts.ArtifactView +import org.gradle.api.artifacts.Configuration import org.gradle.api.artifacts.component.LibraryBinaryIdentifier import org.gradle.api.artifacts.component.ModuleComponentIdentifier import org.gradle.api.artifacts.component.ModuleComponentSelector @@ -27,6 +28,7 @@ import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMetadataCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.internal import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmVariant +import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.markResolvable import org.jetbrains.kotlin.gradle.plugin.mpp.resolvableMetadataConfiguration import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSet import org.jetbrains.kotlin.gradle.plugin.sources.InternalKotlinSourceSet @@ -40,8 +42,9 @@ internal class IdeBinaryDependencyResolver( ) : IdeDependencyResolver { sealed class ArtifactResolutionStrategy { + /** - * Resolve the artifacts from a [GradleKpmVariant] using its [GradleKpmVariant.compileDependenciesConfiguration], + * Resolve the artifacts from a [KotlinSourceSet] using its [KotlinCompilation.compileDependencyConfigurationName], * which already knows how to resolve platform artifacts. * @param setupArtifactViewAttributes: Additional attributes that will be used to create an [ArtifactView] for resolving the dependencies. */ @@ -51,6 +54,15 @@ internal class IdeBinaryDependencyResolver( internal val setupArtifactViewAttributes: AttributeContainer.(sourceSet: KotlinSourceSet) -> Unit = {} ) : ArtifactResolutionStrategy() + /** + * Resolve the artifacts from a [KotlinSourceSet] using the configuration returned by [configurationSelector]. + * @param setupArtifactViewAttributes: Additional attributes that will be used to create an [ArtifactView] for resolving the dependencies. + */ + data class ResolvableConfiguration( + internal val configurationSelector: (KotlinSourceSet) -> Configuration?, + internal val setupArtifactViewAttributes: AttributeContainer.(sourceSet: KotlinSourceSet) -> Unit = {} + ) : ArtifactResolutionStrategy() + /** * Capable of resolving artifacts from a plain [GradleKpmFragment] which does not have to implement [GradleKpmVariant]. * Such fragments are called 'platform-like', since they still resolve the linkable platform dependencies. @@ -134,6 +146,7 @@ internal class IdeBinaryDependencyResolver( private fun ArtifactResolutionStrategy.createArtifactView(sourceSet: InternalKotlinSourceSet): ArtifactView? { return when (this) { is ArtifactResolutionStrategy.Compilation -> createArtifactView(sourceSet) + is ArtifactResolutionStrategy.ResolvableConfiguration -> createArtifactView(sourceSet) is ArtifactResolutionStrategy.PlatformLikeSourceSet -> createArtifactView(sourceSet) } } @@ -156,11 +169,20 @@ internal class IdeBinaryDependencyResolver( } } + private fun ArtifactResolutionStrategy.ResolvableConfiguration.createArtifactView(sourceSet: InternalKotlinSourceSet): ArtifactView? { + val configuration = configurationSelector(sourceSet) ?: return null + return configuration.incoming.artifactView { view -> + view.isLenient = true + view.attributes.setupArtifactViewAttributes(sourceSet) + } + } + private fun ArtifactResolutionStrategy.PlatformLikeSourceSet.createArtifactView(sourceSet: InternalKotlinSourceSet): ArtifactView? { if (sourceSet !is DefaultKotlinSourceSet) return null val project = sourceSet.project val platformLikeCompileDependenciesConfiguration = project.configurations.detachedConfiguration() + platformLikeCompileDependenciesConfiguration.markResolvable() platformLikeCompileDependenciesConfiguration.attributes.setupPlatformResolutionAttributes(sourceSet) platformLikeCompileDependenciesConfiguration.dependencies.addAll(sourceSet.resolvableMetadataConfiguration.allDependencies) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeMetadataSourcesResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeMetadataSourcesResolver.kt index 72b1a2f50cc..0f0019e0716 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeMetadataSourcesResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdeMetadataSourcesResolver.kt @@ -9,19 +9,16 @@ package org.jetbrains.kotlin.gradle.plugin.ide.dependencyResolvers import org.gradle.api.attributes.Category import org.gradle.api.attributes.DocsType -import org.gradle.api.attributes.Usage import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinDependency -import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType +import org.jetbrains.kotlin.gradle.plugin.mpp.resolvableMetadataConfiguration +import org.jetbrains.kotlin.gradle.plugin.sources.internal import org.jetbrains.kotlin.gradle.plugin.sources.project import org.jetbrains.kotlin.gradle.utils.named internal fun IdeMetadataSourcesResolver(): IdeBinaryDependencyResolver = IdeBinaryDependencyResolver( binaryType = IdeaKotlinDependency.SOURCES_BINARY_TYPE, - artifactResolutionStrategy = IdeBinaryDependencyResolver.ArtifactResolutionStrategy.PlatformLikeSourceSet( - setupPlatformResolutionAttributes = { - attribute(KotlinPlatformType.attribute, KotlinPlatformType.common) - attribute(Usage.USAGE_ATTRIBUTE, it.project.objects.named(Usage.JAVA_RUNTIME)) - }, + artifactResolutionStrategy = IdeBinaryDependencyResolver.ArtifactResolutionStrategy.ResolvableConfiguration( + configurationSelector = { it.internal.resolvableMetadataConfiguration }, setupArtifactViewAttributes = { attribute(Category.CATEGORY_ATTRIBUTE, it.project.objects.named(Category.DOCUMENTATION)) attribute(DocsType.DOCS_TYPE_ATTRIBUTE, it.project.objects.named(DocsType.SOURCES)) diff --git a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdePlatformSourcesResolver.kt b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdePlatformSourcesResolver.kt index 5f827f6cfa2..db5ca8275a6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdePlatformSourcesResolver.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/common/kotlin/org/jetbrains/kotlin/gradle/plugin/ide/dependencyResolvers/IdePlatformSourcesResolver.kt @@ -22,4 +22,3 @@ internal fun IdePlatformSourcesResolver(): IdeBinaryDependencyResolver = IdeBina } ) ) -