[Gradle] Implement IdeaKotlinBinaryCoordinates.displayString and identityString

^KT-60053 In Progress
This commit is contained in:
Sebastian Sellmair
2023-07-10 20:20:13 +02:00
committed by Space Team
parent e3f0fa4257
commit 7af254fbf2
8 changed files with 192 additions and 48 deletions
@@ -327,7 +327,9 @@ public final class org/jetbrains/kotlin/gradle/idea/tcs/IdeaKotlinBinaryCoordina
public static synthetic fun copy$default (Lorg/jetbrains/kotlin/gradle/idea/tcs/IdeaKotlinBinaryCoordinates;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;ILjava/lang/Object;)Lorg/jetbrains/kotlin/gradle/idea/tcs/IdeaKotlinBinaryCoordinates;
public fun equals (Ljava/lang/Object;)Z
public final fun getCapabilities ()Ljava/util/Set;
public final fun getDisplayString ()Ljava/lang/String;
public final fun getGroup ()Ljava/lang/String;
public final fun getIdentityString ()Ljava/lang/String;
public final fun getModule ()Ljava/lang/String;
public final fun getSourceSetName ()Ljava/lang/String;
public final fun getVersion ()Ljava/lang/String;
@@ -47,13 +47,15 @@ class IdeaKotlinBinaryCoordinates(
* This, however, shall not be shown to users, as the String is hard to read
* The identityString is not stable across Kotlin versions, hence not intended to be parsed.
*/
val identityString = buildString {
append("$group:$module")
if (version != null) append(":$version")
if (capabilities.isNotEmpty()) {
append(capabilities.joinToString(", ", "(", ")"))
val identityString: String
get() = buildString {
append("$group:$module")
if (sourceSetName != null) append(":$sourceSetName")
if (version != null) append(":$version")
if (capabilities.isNotEmpty()) {
append(capabilities.joinToString(", ", "(", ")"))
}
}
}
/**
* String intended to be shown to users. E.g. a library within the IDE can use
@@ -82,23 +84,30 @@ class IdeaKotlinBinaryCoordinates(
* "org.jetbrains:sample-test-fixtures:1.0.0"
*
*/
val displayString = run {
val classifyingCapabilities = capabilities.filter { capability -> capability.group == group && capability.name.startsWith(module) }
when {
classifyingCapabilities.size == 1 -> classifyingCapabilities.single().toString()
classifyingCapabilities.size > 1 -> buildString {
append(group)
append(classifyingCapabilities.joinToString(prefix = "(", postfix = ")", separator = ", ") { capability ->
capability.name.removePrefix(group)
})
}
else -> buildString {
append("$group:$module")
if (version != null) append(":$version")
if (sourceSetName != null) append(":$sourceSetName")
val displayString: String
get() {
val classifyingCapabilities =
capabilities.filter { capability -> capability.group == group && capability.name.startsWith(module) }
return when {
classifyingCapabilities.size == 1 -> buildString {
append(classifyingCapabilities.single())
if (sourceSetName != null) append(":$sourceSetName")
}
classifyingCapabilities.size > 1 -> buildString {
append("$group:$module-")
append(classifyingCapabilities.joinToString(prefix = "(", postfix = ")", separator = ", ") { capability ->
capability.name.removePrefix(module).removePrefix("-")
})
if (sourceSetName != null) append(":$sourceSetName")
if (version != null) append(":$version")
}
else -> buildString {
append("$group:$module")
if (sourceSetName != null) append(":$sourceSetName")
if (version != null) append(":$version")
}
}
}
}
override fun toString(): String = displayString
@@ -0,0 +1,133 @@
/*
* 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.
*/
package org.jetbrains.kotlin.gradle.idea.test.tcs
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinBinaryCapability
import org.jetbrains.kotlin.gradle.idea.tcs.IdeaKotlinBinaryCoordinates
import kotlin.test.Test
import kotlin.test.assertEquals
class IdeaKotlinBinaryCoordinatesTest {
@Test
fun `test - displayString & identityString - sample 0`() {
val coordinates = IdeaKotlinBinaryCoordinates("myGroup", "myModule", "1.0.0")
assertEquals("myGroup:myModule:1.0.0", coordinates.displayString)
assertEquals("myGroup:myModule:1.0.0", coordinates.identityString)
}
@Test
fun `test - displayString & identityString - sample 1`() {
val coordinates = IdeaKotlinBinaryCoordinates("myGroup", "myModule", null)
assertEquals("myGroup:myModule", coordinates.displayString)
assertEquals("myGroup:myModule", coordinates.identityString)
}
@Test
fun `test - displayString & identityString - sample 2`() {
val coordinates = IdeaKotlinBinaryCoordinates(
"myGroup", "myModule", "1.0.0",
capabilities = setOf(IdeaKotlinBinaryCapability("myGroup", "myModule", "1.0.0"))
)
assertEquals("myGroup:myModule:1.0.0", coordinates.displayString)
assertEquals("myGroup:myModule:1.0.0(myGroup:myModule:1.0.0)", coordinates.identityString)
}
@Test
fun `test - displayString & identityString - sample 3`() {
val coordinates = IdeaKotlinBinaryCoordinates(
"myGroup", "myModule", "1.0.0",
capabilities = setOf(IdeaKotlinBinaryCapability("myGroup", "myModule-foo", "1.0.0"))
)
assertEquals("myGroup:myModule-foo:1.0.0", coordinates.displayString)
assertEquals("myGroup:myModule:1.0.0(myGroup:myModule-foo:1.0.0)", coordinates.identityString)
}
@Test
fun `test - displayString & identityString - sample 4`() {
val coordinates = IdeaKotlinBinaryCoordinates(
"myGroup", "myModule", "1.0.0",
capabilities = setOf(IdeaKotlinBinaryCapability("notMyGroup", "myModule-foo", "1.0.0"))
)
assertEquals("myGroup:myModule:1.0.0", coordinates.displayString)
assertEquals(
"myGroup:myModule:1.0.0(notMyGroup:myModule-foo:1.0.0)",
coordinates.identityString
)
}
@Test
fun `test - displayString & identityString - sample 5`() {
val coordinates = IdeaKotlinBinaryCoordinates(
"myGroup", "myModule", "1.0.0",
capabilities = setOf(
IdeaKotlinBinaryCapability("notMyGroup", "myModule-foo", "1.0.0"),
IdeaKotlinBinaryCapability("myGroup", "myModule-foo", "1.0.0")
)
)
assertEquals("myGroup:myModule-foo:1.0.0", coordinates.displayString)
assertEquals(
"myGroup:myModule:1.0.0(notMyGroup:myModule-foo:1.0.0, myGroup:myModule-foo:1.0.0)",
coordinates.identityString
)
}
@Test
fun `test - displayString & identityString - sample 6`() {
val coordinates = IdeaKotlinBinaryCoordinates(
"myGroup", "myModule", "1.0.0",
capabilities = setOf(
IdeaKotlinBinaryCapability("myGroup", "myModule-foo", "1.0.0"),
IdeaKotlinBinaryCapability("notMyGroup", "myModule-foo", "1.0.0"),
IdeaKotlinBinaryCapability("notMyGroupEither", "myModule-foo", null),
)
)
assertEquals("myGroup:myModule-foo:1.0.0", coordinates.displayString)
assertEquals(
"myGroup:myModule:1.0.0(myGroup:myModule-foo:1.0.0, notMyGroup:myModule-foo:1.0.0, notMyGroupEither:myModule-foo)",
coordinates.identityString
)
}
@Test
fun `test - displayString & identityString - sample 7`() {
val coordinates = IdeaKotlinBinaryCoordinates(
"myGroup", "myModule", "1.0.0", "commonMain",
capabilities = setOf(
IdeaKotlinBinaryCapability("myGroup", "myModule-foo", "1.0.0"),
IdeaKotlinBinaryCapability("notMyGroup", "myModule-foo", "1.0.0"),
IdeaKotlinBinaryCapability("notMyGroupEither", "myModule-foo", null),
)
)
assertEquals("myGroup:myModule-foo:1.0.0:commonMain", coordinates.displayString)
assertEquals(
"myGroup:myModule:1.0.0:commonMain(myGroup:myModule-foo:1.0.0, notMyGroup:myModule-foo:1.0.0, notMyGroupEither:myModule-foo)",
coordinates.identityString
)
}
@Test
fun `test - displayString & identityString - sample 8`() {
val coordinates = IdeaKotlinBinaryCoordinates(
"myGroup", "myModule", "1.0.0", "commonMain",
capabilities = setOf(
IdeaKotlinBinaryCapability("myGroup", "myModule-foo", "1.0.0"),
IdeaKotlinBinaryCapability("myGroup", "myModule-bar", "1.0.0"),
IdeaKotlinBinaryCapability("notMyGroup", "myModule-foo", null),
)
)
assertEquals("myGroup:myModule-(foo, bar):1.0.0:commonMain", coordinates.displayString)
assertEquals(
"myGroup:myModule:1.0.0:commonMain(myGroup:myModule-foo:1.0.0, myGroup:myModule-bar:1.0.0, notMyGroup:myModule-foo)",
coordinates.identityString
)
}
}