[Gradle] Ide Dependency Resolution: Provide attributes for binary coordinates

^KT-60053 Verification Pending
This commit is contained in:
Sebastian Sellmair
2023-07-12 16:35:43 +02:00
committed by Space Team
parent 6140854fa6
commit 3032d02ce9
23 changed files with 1478 additions and 63 deletions
@@ -19,11 +19,8 @@ import org.jetbrains.kotlin.gradle.idea.tcs.extras.isIdeaProjectLevel
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
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.*
import org.jetbrains.kotlin.gradle.plugin.ide.IdeDependencyResolver.Companion.gradleArtifact
import org.jetbrains.kotlin.gradle.plugin.ide.IdeaKotlinBinaryCapability
import org.jetbrains.kotlin.gradle.plugin.ide.IdeaKotlinBinaryCoordinates
import org.jetbrains.kotlin.gradle.plugin.ide.IdeaKotlinProjectCoordinates
import org.jetbrains.kotlin.gradle.plugin.ide.dependencyResolvers.IdeBinaryDependencyResolver.ArtifactResolutionStrategy
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMetadataCompilation
import org.jetbrains.kotlin.gradle.plugin.mpp.compilationImpl.KotlinCompilationConfigurationsContainer
@@ -153,7 +150,7 @@ class IdeBinaryDependencyResolver @JvmOverloads constructor(
is ModuleComponentIdentifier -> {
IdeaKotlinResolvedBinaryDependency(
coordinates = IdeaKotlinBinaryCoordinates(componentId, artifact.variant.capabilities),
coordinates = IdeaKotlinBinaryCoordinates(componentId, artifact.variant.capabilities, artifact.variant.attributes),
binaryType = binaryType,
classpath = IdeaKotlinClasspath(artifact.file),
)
@@ -166,7 +163,8 @@ class IdeBinaryDependencyResolver @JvmOverloads constructor(
module = componentId.libraryName,
version = null,
sourceSetName = null,
capabilities = artifact.variant.capabilities.map(::IdeaKotlinBinaryCapability).toSet()
capabilities = artifact.variant.capabilities.map(::IdeaKotlinBinaryCapability).toSet(),
attributes = IdeaKotlinBinaryAttributes(artifact.variant.attributes)
), classpath = IdeaKotlinClasspath(artifact.file)
)
}
@@ -34,8 +34,8 @@ internal object IdeOriginalMetadataDependencyResolver : IdeDependencyResolver {
IdeaKotlinResolvedBinaryDependency(
binaryType = IdeaKotlinBinaryDependency.KOTLIN_COMPILE_BINARY_TYPE,
classpath = IdeaKotlinClasspath(artifact.file),
coordinates = IdeaKotlinBinaryCoordinates(moduleId)
coordinates = IdeaKotlinBinaryCoordinates(moduleId, artifact.variant.capabilities, artifact.variant.attributes)
)
}.toSet()
}
}
}
@@ -8,11 +8,9 @@ package org.jetbrains.kotlin.gradle.plugin.ide
import org.gradle.api.Project
import org.gradle.api.artifacts.component.ModuleComponentIdentifier
import org.gradle.api.artifacts.component.ProjectComponentIdentifier
import org.gradle.api.attributes.AttributeContainer
import org.gradle.api.capabilities.Capability
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinBinaryCapability
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinBinaryCoordinates
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinProjectCoordinates
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinSourceCoordinates
import org.jetbrains.kotlin.gradle.idea.tcs.*
import org.jetbrains.kotlin.gradle.idea.tcs.extras.KlibExtra
import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSet
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.currentBuildId
@@ -45,12 +43,14 @@ internal fun IdeaKotlinSourceCoordinates(sourceSet: KotlinSourceSet): IdeaKotlin
internal fun IdeaKotlinBinaryCoordinates(
identifier: ModuleComponentIdentifier,
capabilities: List<Capability> = emptyList(),
attributes: AttributeContainer,
): IdeaKotlinBinaryCoordinates {
return IdeaKotlinBinaryCoordinates(
group = identifier.group,
module = identifier.module,
version = identifier.version,
capabilities = capabilities.map(::IdeaKotlinBinaryCapability).toSet()
capabilities = capabilities.map(::IdeaKotlinBinaryCapability).toSet(),
attributes = IdeaKotlinBinaryAttributes(attributes)
)
}
@@ -62,6 +62,12 @@ internal fun IdeaKotlinBinaryCapability(capability: Capability): IdeaKotlinBinar
)
}
internal fun IdeaKotlinBinaryAttributes(attributes: AttributeContainer): IdeaKotlinBinaryAttributes {
return IdeaKotlinBinaryAttributes(
attributes.keySet().associate { key -> key.name to attributes.getAttribute(key).toString() }
)
}
internal fun KlibExtra(library: KotlinLibrary): KlibExtra {
return KlibExtra(
builtInsPlatform = library.builtInsPlatform,
@@ -0,0 +1,36 @@
/*
* 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.
*/
@file:Suppress("FunctionName")
package org.jetbrains.kotlin.gradle.unitTests
import org.gradle.api.attributes.Category
import org.gradle.api.attributes.Usage
import org.jetbrains.kotlin.gradle.plugin.ide.IdeaKotlinBinaryAttributes
import org.jetbrains.kotlin.gradle.util.buildProject
import org.jetbrains.kotlin.gradle.utils.named
import kotlin.test.Test
import kotlin.test.assertEquals
class IdeaKotlinBinaryAttributesFactoryTest {
@Test
fun `test - sample 0`() {
val project = buildProject()
val dummyConfiguration = project.configurations.create("dummy")
val container = dummyConfiguration.attributes
container.attribute(Usage.USAGE_ATTRIBUTE, project.objects.named(Usage.JAVA_API))
container.attribute(Category.CATEGORY_ATTRIBUTE, project.objects.named(Category.DOCUMENTATION))
assertEquals(
mapOf(
"org.gradle.usage" to "java-api",
"org.gradle.category" to "documentation"
), IdeaKotlinBinaryAttributes(container)
)
}
}