[Gradle] Implement IdeMetadataSourcesResolver by resolving 'resolvableMetadataConfiguration'
^KT-55289 Verification Pending
This commit is contained in:
committed by
Space Team
parent
bfdcda82ab
commit
b659778b2f
+23
-1
@@ -6,6 +6,7 @@
|
|||||||
package org.jetbrains.kotlin.gradle.plugin.ide.dependencyResolvers
|
package org.jetbrains.kotlin.gradle.plugin.ide.dependencyResolvers
|
||||||
|
|
||||||
import org.gradle.api.artifacts.ArtifactView
|
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.LibraryBinaryIdentifier
|
||||||
import org.gradle.api.artifacts.component.ModuleComponentIdentifier
|
import org.gradle.api.artifacts.component.ModuleComponentIdentifier
|
||||||
import org.gradle.api.artifacts.component.ModuleComponentSelector
|
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.internal
|
||||||
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.GradleKpmFragment
|
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.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.mpp.resolvableMetadataConfiguration
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSet
|
import org.jetbrains.kotlin.gradle.plugin.sources.DefaultKotlinSourceSet
|
||||||
import org.jetbrains.kotlin.gradle.plugin.sources.InternalKotlinSourceSet
|
import org.jetbrains.kotlin.gradle.plugin.sources.InternalKotlinSourceSet
|
||||||
@@ -40,8 +42,9 @@ internal class IdeBinaryDependencyResolver(
|
|||||||
) : IdeDependencyResolver {
|
) : IdeDependencyResolver {
|
||||||
|
|
||||||
sealed class ArtifactResolutionStrategy {
|
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.
|
* which already knows how to resolve platform artifacts.
|
||||||
* @param setupArtifactViewAttributes: Additional attributes that will be used to create an [ArtifactView] for resolving the dependencies.
|
* @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 = {}
|
internal val setupArtifactViewAttributes: AttributeContainer.(sourceSet: KotlinSourceSet) -> Unit = {}
|
||||||
) : ArtifactResolutionStrategy()
|
) : 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].
|
* 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.
|
* 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? {
|
private fun ArtifactResolutionStrategy.createArtifactView(sourceSet: InternalKotlinSourceSet): ArtifactView? {
|
||||||
return when (this) {
|
return when (this) {
|
||||||
is ArtifactResolutionStrategy.Compilation -> createArtifactView(sourceSet)
|
is ArtifactResolutionStrategy.Compilation -> createArtifactView(sourceSet)
|
||||||
|
is ArtifactResolutionStrategy.ResolvableConfiguration -> createArtifactView(sourceSet)
|
||||||
is ArtifactResolutionStrategy.PlatformLikeSourceSet -> 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? {
|
private fun ArtifactResolutionStrategy.PlatformLikeSourceSet.createArtifactView(sourceSet: InternalKotlinSourceSet): ArtifactView? {
|
||||||
if (sourceSet !is DefaultKotlinSourceSet) return null
|
if (sourceSet !is DefaultKotlinSourceSet) return null
|
||||||
val project = sourceSet.project
|
val project = sourceSet.project
|
||||||
|
|
||||||
val platformLikeCompileDependenciesConfiguration = project.configurations.detachedConfiguration()
|
val platformLikeCompileDependenciesConfiguration = project.configurations.detachedConfiguration()
|
||||||
|
platformLikeCompileDependenciesConfiguration.markResolvable()
|
||||||
platformLikeCompileDependenciesConfiguration.attributes.setupPlatformResolutionAttributes(sourceSet)
|
platformLikeCompileDependenciesConfiguration.attributes.setupPlatformResolutionAttributes(sourceSet)
|
||||||
platformLikeCompileDependenciesConfiguration.dependencies.addAll(sourceSet.resolvableMetadataConfiguration.allDependencies)
|
platformLikeCompileDependenciesConfiguration.dependencies.addAll(sourceSet.resolvableMetadataConfiguration.allDependencies)
|
||||||
|
|
||||||
|
|||||||
+4
-7
@@ -9,19 +9,16 @@ package org.jetbrains.kotlin.gradle.plugin.ide.dependencyResolvers
|
|||||||
|
|
||||||
import org.gradle.api.attributes.Category
|
import org.gradle.api.attributes.Category
|
||||||
import org.gradle.api.attributes.DocsType
|
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.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.plugin.sources.project
|
||||||
import org.jetbrains.kotlin.gradle.utils.named
|
import org.jetbrains.kotlin.gradle.utils.named
|
||||||
|
|
||||||
internal fun IdeMetadataSourcesResolver(): IdeBinaryDependencyResolver = IdeBinaryDependencyResolver(
|
internal fun IdeMetadataSourcesResolver(): IdeBinaryDependencyResolver = IdeBinaryDependencyResolver(
|
||||||
binaryType = IdeaKotlinDependency.SOURCES_BINARY_TYPE,
|
binaryType = IdeaKotlinDependency.SOURCES_BINARY_TYPE,
|
||||||
artifactResolutionStrategy = IdeBinaryDependencyResolver.ArtifactResolutionStrategy.PlatformLikeSourceSet(
|
artifactResolutionStrategy = IdeBinaryDependencyResolver.ArtifactResolutionStrategy.ResolvableConfiguration(
|
||||||
setupPlatformResolutionAttributes = {
|
configurationSelector = { it.internal.resolvableMetadataConfiguration },
|
||||||
attribute(KotlinPlatformType.attribute, KotlinPlatformType.common)
|
|
||||||
attribute(Usage.USAGE_ATTRIBUTE, it.project.objects.named(Usage.JAVA_RUNTIME))
|
|
||||||
},
|
|
||||||
setupArtifactViewAttributes = {
|
setupArtifactViewAttributes = {
|
||||||
attribute(Category.CATEGORY_ATTRIBUTE, it.project.objects.named(Category.DOCUMENTATION))
|
attribute(Category.CATEGORY_ATTRIBUTE, it.project.objects.named(Category.DOCUMENTATION))
|
||||||
attribute(DocsType.DOCS_TYPE_ATTRIBUTE, it.project.objects.named(DocsType.SOURCES))
|
attribute(DocsType.DOCS_TYPE_ATTRIBUTE, it.project.objects.named(DocsType.SOURCES))
|
||||||
|
|||||||
-1
@@ -22,4 +22,3 @@ internal fun IdePlatformSourcesResolver(): IdeBinaryDependencyResolver = IdeBina
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user