[Gradle] Implement IdeaKotlinBinaryCoordinates.displayString and identityString
^KT-60053 In Progress
This commit is contained in:
committed by
Space Team
parent
e3f0fa4257
commit
7af254fbf2
@@ -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;
|
||||
|
||||
+30
-21
@@ -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
|
||||
|
||||
|
||||
+133
@@ -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
|
||||
)
|
||||
}
|
||||
}
|
||||
+3
-3
@@ -235,7 +235,7 @@ class MppIdeDependencyResolutionIT : KGPBaseTest() {
|
||||
resolveIdeDependencies { dependencies ->
|
||||
dependencies["commonMain"].assertMatches(
|
||||
kotlinNativeDistributionDependencies,
|
||||
binaryCoordinates(Regex("com.example:cinterop-.*-dummy:.*:linux_x64")),
|
||||
binaryCoordinates(Regex("com.example:cinterop-.*-dummy:linux_x64")),
|
||||
IdeaKotlinDependencyMatcher("Unresolved 'failing' cinterop") { dependency ->
|
||||
dependency is IdeaKotlinUnresolvedBinaryDependency && dependency.cause.orEmpty().contains(
|
||||
"cinterop-withFailingCInteropProcess-cinterop-failing.klib"
|
||||
@@ -270,8 +270,8 @@ class MppIdeDependencyResolutionIT : KGPBaseTest() {
|
||||
build(":lib:copyCommonizeCInteropForIde")
|
||||
resolveIdeDependencies { dependencies ->
|
||||
dependencies["linuxMain"].cinteropDependencies().assertMatches(
|
||||
binaryCoordinates("org.example:included-lib-cinterop-a:null:(linux_arm64, linux_x64)"),
|
||||
binaryCoordinates("org.example:lib-cinterop-a:null:(linux_arm64, linux_x64)"),
|
||||
binaryCoordinates("org.example:included-lib-cinterop-a:(linux_arm64, linux_x64)"),
|
||||
binaryCoordinates("org.example:lib-cinterop-a:(linux_arm64, linux_x64)"),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -77,7 +77,7 @@ class ResolvableMetadataConfigurationTest {
|
||||
/* Check IDE resolution for commonMain */
|
||||
project.kotlinIdeMultiplatformImport.resolveDependencies("commonMain")
|
||||
.assertMatches(
|
||||
binaryCoordinates(Regex("com.squareup.okio:okio(-.*)?:3.3.0:.*")),
|
||||
binaryCoordinates(Regex("com.squareup.okio:okio(-.*)?:.*:3.3.0")),
|
||||
binaryCoordinates(Regex("org.jetbrains.kotlin.*"))
|
||||
)
|
||||
|
||||
@@ -86,8 +86,8 @@ class ResolvableMetadataConfigurationTest {
|
||||
.filterIsInstance<IdeaKotlinBinaryDependency>()
|
||||
.filter { it.coordinates?.group.orEmpty() in setOf("com.squareup.okio", "com.arkivanov.mvikotlin") }
|
||||
.assertMatches(
|
||||
binaryCoordinates(Regex("com.squareup.okio:okio(-.*)?:3.3.0:.*")),
|
||||
binaryCoordinates(Regex("com.arkivanov.mvikotlin:mvikotlin(-*)?:3.0.2:.*")),
|
||||
binaryCoordinates(Regex("com.squareup.okio:okio(-.*)?:.*:3.3.0")),
|
||||
binaryCoordinates(Regex("com.arkivanov.mvikotlin:mvikotlin(-*)?:.*:3.0.2")),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+4
-4
@@ -35,8 +35,8 @@ class IdeNativePlatformDependencyResolverTest {
|
||||
val linuxX64Test = kotlin.sourceSets.getByName("linuxX64Test")
|
||||
|
||||
val dependencies = listOf(
|
||||
binaryCoordinates("org.jetbrains.kotlin.native:posix:${project.konanVersion}:$LINUX_X64"),
|
||||
binaryCoordinates(Regex("""org\.jetbrains\.kotlin\.native:.*:${project.konanVersion}:$LINUX_X64"""))
|
||||
binaryCoordinates("org.jetbrains.kotlin.native:posix:$LINUX_X64:${project.konanVersion}"),
|
||||
binaryCoordinates(Regex("""org\.jetbrains\.kotlin\.native:.*:$LINUX_X64:${project.konanVersion}"""))
|
||||
)
|
||||
|
||||
IdeNativePlatformDependencyResolver.resolve(commonMain).assertMatches(dependencies)
|
||||
@@ -60,8 +60,8 @@ class IdeNativePlatformDependencyResolverTest {
|
||||
val macosArm64Test = kotlin.sourceSets.getByName("macosArm64Test")
|
||||
|
||||
val dependencies = listOf(
|
||||
binaryCoordinates("org.jetbrains.kotlin.native:CoreFoundation:${project.konanVersion}:$MACOS_ARM64"),
|
||||
binaryCoordinates(Regex("""org\.jetbrains\.kotlin\.native:.*:${project.konanVersion}:$MACOS_ARM64"""))
|
||||
binaryCoordinates("org.jetbrains.kotlin.native:CoreFoundation:$MACOS_ARM64:${project.konanVersion}"),
|
||||
binaryCoordinates(Regex("""org\.jetbrains\.kotlin\.native:.*:$MACOS_ARM64:${project.konanVersion}"""))
|
||||
)
|
||||
|
||||
IdeNativePlatformDependencyResolver.resolve(commonMain).assertMatches(dependencies)
|
||||
|
||||
+7
-7
@@ -64,9 +64,9 @@ class IdeSourcesAndDocumentationResolutionTest {
|
||||
/* Check commonMain&commonTest */
|
||||
run {
|
||||
val expectedDependencies = listOf(
|
||||
binaryCoordinates("com.arkivanov.mvikotlin:mvikotlin:3.0.2:commonMain"),
|
||||
binaryCoordinates("com.arkivanov.essenty:lifecycle:0.4.2:commonMain"),
|
||||
binaryCoordinates("com.arkivanov.essenty:instance-keeper:0.4.2:commonMain"),
|
||||
binaryCoordinates("com.arkivanov.mvikotlin:mvikotlin:commonMain:3.0.2"),
|
||||
binaryCoordinates("com.arkivanov.essenty:lifecycle:commonMain:0.4.2"),
|
||||
binaryCoordinates("com.arkivanov.essenty:instance-keeper:commonMain:0.4.2"),
|
||||
)
|
||||
|
||||
val resolvedDependencies = resolveDependencySources(commonMain)
|
||||
@@ -78,10 +78,10 @@ class IdeSourcesAndDocumentationResolutionTest {
|
||||
/* Check nativeMain&nativeTest */
|
||||
run {
|
||||
val expectedDependencies = listOf(
|
||||
binaryCoordinates("com.arkivanov.mvikotlin:mvikotlin:3.0.2:commonMain"),
|
||||
binaryCoordinates("com.arkivanov.mvikotlin:mvikotlin:3.0.2:jsNativeMain"),
|
||||
binaryCoordinates("com.arkivanov.essenty:lifecycle:0.4.2:commonMain"),
|
||||
binaryCoordinates("com.arkivanov.essenty:instance-keeper:0.4.2:commonMain"),
|
||||
binaryCoordinates("com.arkivanov.mvikotlin:mvikotlin:commonMain:3.0.2"),
|
||||
binaryCoordinates("com.arkivanov.mvikotlin:mvikotlin:jsNativeMain:3.0.2"),
|
||||
binaryCoordinates("com.arkivanov.essenty:lifecycle:commonMain:0.4.2"),
|
||||
binaryCoordinates("com.arkivanov.essenty:instance-keeper:commonMain:0.4.2"),
|
||||
IdeNativeStdlibDependencyResolver.nativeStdlibCoordinates(project),
|
||||
binaryCoordinates(Regex(".*stdlib-common:.*")) /* KT-56278 */
|
||||
)
|
||||
|
||||
+10
-10
@@ -49,24 +49,24 @@ class IdeTransformedMetadataDependencyResolverTest {
|
||||
|
||||
IdeTransformedMetadataDependencyResolver.resolve(commonMain)
|
||||
.assertMatches(
|
||||
binaryCoordinates("com.arkivanov.mvikotlin:mvikotlin:3.0.2:commonMain"),
|
||||
binaryCoordinates("com.arkivanov.essenty:lifecycle:0.4.2:commonMain"),
|
||||
binaryCoordinates("com.arkivanov.essenty:instance-keeper:0.4.2:commonMain")
|
||||
binaryCoordinates("com.arkivanov.mvikotlin:mvikotlin:commonMain:3.0.2"),
|
||||
binaryCoordinates("com.arkivanov.essenty:lifecycle:commonMain:0.4.2"),
|
||||
binaryCoordinates("com.arkivanov.essenty:instance-keeper:commonMain:0.4.2")
|
||||
)
|
||||
|
||||
IdeTransformedMetadataDependencyResolver.resolve(commonTest)
|
||||
.assertMatches(
|
||||
binaryCoordinates("com.arkivanov.mvikotlin:mvikotlin:3.0.2:commonMain"),
|
||||
binaryCoordinates("com.arkivanov.essenty:lifecycle:0.4.2:commonMain"),
|
||||
binaryCoordinates("com.arkivanov.essenty:instance-keeper:0.4.2:commonMain")
|
||||
binaryCoordinates("com.arkivanov.mvikotlin:mvikotlin:commonMain:3.0.2"),
|
||||
binaryCoordinates("com.arkivanov.essenty:lifecycle:commonMain:0.4.2"),
|
||||
binaryCoordinates("com.arkivanov.essenty:instance-keeper:commonMain:0.4.2")
|
||||
)
|
||||
|
||||
IdeTransformedMetadataDependencyResolver.resolve(linuxMain)
|
||||
.assertMatches(
|
||||
binaryCoordinates("com.arkivanov.mvikotlin:mvikotlin:3.0.2:commonMain"),
|
||||
binaryCoordinates("com.arkivanov.mvikotlin:mvikotlin:3.0.2:jsNativeMain"),
|
||||
binaryCoordinates("com.arkivanov.essenty:lifecycle:0.4.2:commonMain"),
|
||||
binaryCoordinates("com.arkivanov.essenty:instance-keeper:0.4.2:commonMain")
|
||||
binaryCoordinates("com.arkivanov.mvikotlin:mvikotlin:commonMain:3.0.2"),
|
||||
binaryCoordinates("com.arkivanov.mvikotlin:mvikotlin:jsNativeMain:3.0.2"),
|
||||
binaryCoordinates("com.arkivanov.essenty:lifecycle:commonMain:0.4.2"),
|
||||
binaryCoordinates("com.arkivanov.essenty:instance-keeper:commonMain:0.4.2")
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user