From f996e87528495b2e2b2b7bce003f20a29b19647f Mon Sep 17 00:00:00 2001 From: "sebastian.sellmair" Date: Wed, 22 Jun 2022 15:19:34 +0200 Subject: [PATCH] KotlinToolingVersion: Allow dev versions with generic classifiers e.g.: 1.6.20-dev-myWildcard-510 (build number 510) 1.6.20-dev-myWildcard (no build number) 1.6.20-dev-myWildcard510 (no build number) 1.6.20-dev-google-pr210-510 (build number 510) --- .../tooling/core/KotlinToolingVersion.kt | 10 +++- .../tooling/core/KotlinToolingVersionTest.kt | 49 +++++++++++++++++++ 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/libraries/tools/kotlin-tooling-core/src/main/kotlin/org/jetbrains/kotlin/tooling/core/KotlinToolingVersion.kt b/libraries/tools/kotlin-tooling-core/src/main/kotlin/org/jetbrains/kotlin/tooling/core/KotlinToolingVersion.kt index 7349e5464e4..d980ffc5a63 100644 --- a/libraries/tools/kotlin-tooling-core/src/main/kotlin/org/jetbrains/kotlin/tooling/core/KotlinToolingVersion.kt +++ b/libraries/tools/kotlin-tooling-core/src/main/kotlin/org/jetbrains/kotlin/tooling/core/KotlinToolingVersion.kt @@ -53,7 +53,7 @@ class KotlinToolingVersion( classifier.matches(Regex("""beta(\d*)?(-release)?-?\d*""")) -> Maturity.BETA classifier.matches(Regex("""alpha(\d*)?(-release)?-?\d*""")) -> Maturity.ALPHA classifier.matches(Regex("""m\d+(-release)?(-\d*)?""")) -> Maturity.MILESTONE - classifier.matches(Regex("""(dev|pub)-?\d*""")) -> Maturity.DEV + classifier.matches(Regex("""(dev|pub)(-(\w|-)+)?-?\d*""")) -> Maturity.DEV classifier == "snapshot" -> Maturity.SNAPSHOT else -> throw IllegalArgumentException("Can't infer maturity of KotlinVersion $this") } @@ -188,6 +188,14 @@ val KotlinToolingVersion.classifierNumber: Int? get() { if (classifier == null) return null + /* + dev builds allow additional wildcards in the version (like 1.6.20-dev-myWildcard21-510) + In this case, 510 will be the buildNumber, but there is still no associated classifierNumber. + In order to keep the regex below simple, we fast path out here, since we know that + dev builds never carry classifier numbers + */ + if (maturity == KotlinToolingVersion.Maturity.DEV) return null + /* Classifiers with only a buildNumber assigned */ diff --git a/libraries/tools/kotlin-tooling-core/src/test/kotlin/org/jetbrains/kotlin/tooling/core/KotlinToolingVersionTest.kt b/libraries/tools/kotlin-tooling-core/src/test/kotlin/org/jetbrains/kotlin/tooling/core/KotlinToolingVersionTest.kt index 398c6635464..e6e5ad1b71a 100644 --- a/libraries/tools/kotlin-tooling-core/src/test/kotlin/org/jetbrains/kotlin/tooling/core/KotlinToolingVersionTest.kt +++ b/libraries/tools/kotlin-tooling-core/src/test/kotlin/org/jetbrains/kotlin/tooling/core/KotlinToolingVersionTest.kt @@ -127,6 +127,21 @@ class KotlinToolingVersionTest { ) } + @Test + fun devBuildsWithCustomWildcardsDoNotInfluenceCompareTo() { + assertEquals( + 0, KotlinToolingVersion("1.6.20-dev-myWildcard-510").compareTo(KotlinToolingVersion("1.6.20-dev-myOtherWildcard-510")) + ) + + assertEquals( + 0, KotlinToolingVersion("1.6.20-dev-myWildcard-510").compareTo(KotlinToolingVersion("1.6.20-dev-myWildcard2-510")) + ) + + assertEquals( + 0, KotlinToolingVersion("1.6.20-dev-myWildcard1-510").compareTo(KotlinToolingVersion("1.6.20-dev-myWildcard2-510")) + ) + } + @Test fun maturityWithClassifierNumberAndBuildNumber() { assertEquals( @@ -208,6 +223,16 @@ class KotlinToolingVersionTest { KotlinToolingVersion.Maturity.DEV, KotlinToolingVersion("1.6.20-pUb").maturity ) + + assertEquals( + KotlinToolingVersion.Maturity.DEV, + KotlinToolingVersion("1.6.20-dev-google-pr").maturity + ) + + assertEquals( + KotlinToolingVersion.Maturity.DEV, + KotlinToolingVersion("1.6.20-dev-google-pr-510").maturity + ) } @Test @@ -261,6 +286,22 @@ class KotlinToolingVersionTest { assertEquals(510, KotlinToolingVersion("1.6.20-rc1-release-510").buildNumber) assertEquals(510, KotlinToolingVersion("1.6.20-beta1-release-510").buildNumber) assertEquals(510, KotlinToolingVersion("1.6.20-alpha1-release-510").buildNumber) + + /* dev */ + assertEquals(510, KotlinToolingVersion("1.6.20-dev-510").buildNumber) + assertEquals(510, KotlinToolingVersion("1.6.20-pub-510").buildNumber) + assertEquals(510, KotlinToolingVersion("1.6.20-dev-myWildcard-510").buildNumber) + assertEquals(510, KotlinToolingVersion("1.6.20-pub-myWildcard-510").buildNumber) + assertEquals(510, KotlinToolingVersion("1.6.20-dev-myWildcard1-510").buildNumber) + assertEquals(510, KotlinToolingVersion("1.6.20-pub-myWildcard1-510").buildNumber) + assertNull(KotlinToolingVersion("1.6.20-dev-myWildcard510").buildNumber) + + /* dev with - in wildcards */ + assertEquals(510, KotlinToolingVersion("1.6.20-dev-google-pr-510").buildNumber) + assertEquals(510, KotlinToolingVersion("1.6.20-dev-google-pr-510").buildNumber) + assertEquals(510, KotlinToolingVersion("1.6.20-dev-google-pr210-510").buildNumber) + assertNull(KotlinToolingVersion("1.6.20-dev-google-pr").buildNumber) + assertNull(KotlinToolingVersion("1.6.20-dev-google-pr510").buildNumber) } @Test @@ -286,6 +327,14 @@ class KotlinToolingVersionTest { assertEquals(2, KotlinToolingVersion("1.6.20-m2-release").classifierNumber) assertEquals(2, KotlinToolingVersion("1.6.20-m2-release-510").classifierNumber) + assertNull(KotlinToolingVersion("1.6.20-dev-510").classifierNumber) + assertNull(KotlinToolingVersion("1.6.20-pub-510").classifierNumber) + assertNull(KotlinToolingVersion("1.6.20-dev-myWildcard-510").classifierNumber) + assertNull(KotlinToolingVersion("1.6.20-pub-myWildcard-510").classifierNumber) + assertNull(KotlinToolingVersion("1.6.20-dev-myWildcard1-510").classifierNumber) + assertNull(KotlinToolingVersion("1.6.20-pub-myWildcard1-510").classifierNumber) + assertNull(KotlinToolingVersion("1.6.20-dev-myWildcard510").classifierNumber) + assertNull(KotlinToolingVersion("1.6.20-dev-google-pr510").classifierNumber) } @Test