Skip to content

Commit b263054

Browse files
timofey-soloninSpace Team
authored andcommitted
Document resolution of fallback variant in configurations without attributes
^KT-81488
1 parent f8332a7 commit b263054

File tree

2 files changed

+64
-0
lines changed

2 files changed

+64
-0
lines changed

libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/uklibs/ResolutionTestingAttributes.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,17 @@ val kmpJvmApiVariantAttributes = mapOf(
7676
"org.jetbrains.kotlin.platform.type" to "jvm",
7777
)
7878

79+
val kmpPreHmppAndWithoutCategoryJvmRuntimeVariantAttributes = mapOf(
80+
"org.gradle.usage" to "java-runtime",
81+
"org.gradle.libraryelements" to "jar",
82+
"org.jetbrains.kotlin.platform.type" to "jvm",
83+
)
84+
val kmpPreHmppAndWithoutCategoryJvmApiVariantAttributes = mapOf(
85+
"org.gradle.usage" to "java-api",
86+
"org.gradle.libraryelements" to "jar",
87+
"org.jetbrains.kotlin.platform.type" to "jvm",
88+
)
89+
7990
val kmpMetadataVariantAttributes = mapOf(
8091
"org.gradle.category" to "library",
8192
"org.gradle.jvm.environment" to "non-jvm",

libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/unitTests/uklibs/UklibResolutionWithMockComponents.kt

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@ package org.jetbrains.kotlin.gradle.unitTests.uklibs
77

88
import org.gradle.api.Project
99
import org.gradle.api.artifacts.ModuleDependency
10+
import org.gradle.api.artifacts.result.ResolvedComponentResult
1011
import org.gradle.internal.component.resolution.failure.exception.VariantSelectionByAttributesException
1112
import org.gradle.internal.exceptions.MultiCauseException
13+
import org.gradle.kotlin.dsl.get
1214
import org.gradle.kotlin.dsl.maven
1315
import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl
1416
import org.jetbrains.kotlin.gradle.dsl.multiplatformExtension
@@ -29,6 +31,7 @@ import org.jetbrains.kotlin.gradle.unitTests.uklibs.GradleMetadataComponent.Mock
2931
import org.jetbrains.kotlin.gradle.unitTests.uklibs.GradleMetadataComponent.Variant
3032
import org.jetbrains.kotlin.gradle.unitTests.uklibs.MavenComponent.MockArtifactType
3133
import org.jetbrains.kotlin.gradle.util.*
34+
import org.jetbrains.kotlin.gradle.util.kotlin
3235
import org.jetbrains.kotlin.incremental.createDirectory
3336
import org.junit.Rule
3437
import org.junit.rules.TemporaryFolder
@@ -1404,6 +1407,43 @@ class UklibResolutionTestsWithMockComponents {
14041407
}
14051408
}
14061409

1410+
@Test
1411+
fun `uklib resolution - resolvable configuration without attributes prefers JVM variants over fallback - KT-81488`() {
1412+
val repo = generateMockRepository(
1413+
tmpDir,
1414+
listOf(
1415+
GradleComponent(
1416+
GradleMetadataComponent(
1417+
component = directGradleComponent,
1418+
variants = listOf(
1419+
kmpPreHmppAndWithoutCategoryJvmApiVariant,
1420+
kmpPreHmppAndWithoutCategoryJvmRuntimeVariant,
1421+
),
1422+
),
1423+
directMavenComponent(),
1424+
),
1425+
)
1426+
)
1427+
1428+
val consumer = uklibConsumer {
1429+
kotlin {
1430+
jvm()
1431+
}
1432+
repositories.maven(repo)
1433+
configurations.create("empty") {
1434+
it.isCanBeConsumed = false
1435+
it.dependencies.add(dependencies.create("foo:direct:1.0"))
1436+
}
1437+
}
1438+
1439+
assertEquals(
1440+
listOf("empty", "fallbackVariant_KT-81412"),
1441+
consumer.configurations.getByName("empty").incoming.resolutionResult.allComponents.map {
1442+
it.variants.single().displayName
1443+
}
1444+
)
1445+
}
1446+
14071447
@Test
14081448
fun `standard kmp resolution - KMP and Uklib variants in a single component`() {
14091449
val repo = generateMockRepository(
@@ -1813,4 +1853,17 @@ class UklibResolutionTestsWithMockComponents {
18131853
files = listOf(kmpJvmMock),
18141854
dependencies = listOf()
18151855
)
1856+
1857+
private val kmpPreHmppAndWithoutCategoryJvmApiVariant = Variant(
1858+
name = "jvmApiElements-published",
1859+
attributes = kmpPreHmppAndWithoutCategoryJvmApiVariantAttributes,
1860+
files = listOf(kmpJvmMock),
1861+
dependencies = listOf()
1862+
)
1863+
private val kmpPreHmppAndWithoutCategoryJvmRuntimeVariant = Variant(
1864+
name = "jvmRuntimeElements-published",
1865+
attributes = kmpPreHmppAndWithoutCategoryJvmRuntimeVariantAttributes,
1866+
files = listOf(kmpJvmMock),
1867+
dependencies = listOf()
1868+
)
18161869
}

0 commit comments

Comments
 (0)