diff --git a/libraries/tools/kotlin-gradle-plugin-idea/api/kotlin-gradle-plugin-idea.api b/libraries/tools/kotlin-gradle-plugin-idea/api/kotlin-gradle-plugin-idea.api index cbb0eae7a12..1f53f758daa 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/api/kotlin-gradle-plugin-idea.api +++ b/libraries/tools/kotlin-gradle-plugin-idea/api/kotlin-gradle-plugin-idea.api @@ -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; diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/idea/tcs/IdeaKotlinDependencyCoordinates.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/idea/tcs/IdeaKotlinDependencyCoordinates.kt index a81f77b5cff..9ba14b6a5eb 100644 --- a/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/idea/tcs/IdeaKotlinDependencyCoordinates.kt +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/main/kotlin/org/jetbrains/kotlin/gradle/idea/tcs/IdeaKotlinDependencyCoordinates.kt @@ -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 diff --git a/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/tcs/IdeaKotlinBinaryCoordinatesTest.kt b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/tcs/IdeaKotlinBinaryCoordinatesTest.kt new file mode 100644 index 00000000000..25e4345db63 --- /dev/null +++ b/libraries/tools/kotlin-gradle-plugin-idea/src/test/kotlin/org/jetbrains/kotlin/gradle/idea/test/tcs/IdeaKotlinBinaryCoordinatesTest.kt @@ -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 + ) + } +} diff --git a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/MppIdeDependencyResolutionIT.kt b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/MppIdeDependencyResolutionIT.kt index f0627167eba..3243c4094df 100644 --- a/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/MppIdeDependencyResolutionIT.kt +++ b/libraries/tools/kotlin-gradle-plugin-integration-tests/src/test/kotlin/org/jetbrains/kotlin/gradle/MppIdeDependencyResolutionIT.kt @@ -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)"), ) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/ResolvableMetadataConfigurationTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/ResolvableMetadataConfigurationTest.kt index fbfc51e6812..d613026ec2b 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/ResolvableMetadataConfigurationTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/ResolvableMetadataConfigurationTest.kt @@ -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() .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")), ) } } diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeNativePlatformDependencyResolverTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeNativePlatformDependencyResolverTest.kt index af5dae9b36a..6c9db5b21e6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeNativePlatformDependencyResolverTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeNativePlatformDependencyResolverTest.kt @@ -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) diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeSourcesAndDocumentationResolutionTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeSourcesAndDocumentationResolutionTest.kt index 15ce0027da6..5df2eae68b6 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeSourcesAndDocumentationResolutionTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeSourcesAndDocumentationResolutionTest.kt @@ -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 */ ) diff --git a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeTransformedMetadataDependencyResolverTest.kt b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeTransformedMetadataDependencyResolverTest.kt index bb5a9fa21c0..462c9f2304e 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeTransformedMetadataDependencyResolverTest.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/functionalTest/kotlin/org/jetbrains/kotlin/gradle/dependencyResolutionTests/tcs/IdeTransformedMetadataDependencyResolverTest.kt @@ -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") ) }