From 68004752025607531e32fd6503721254e711174e Mon Sep 17 00:00:00 2001 From: "sebastian.sellmair" Date: Thu, 17 Mar 2022 10:31:04 +0100 Subject: [PATCH] KotlinToolingVersion: Support `-release` in versions --- .../tooling/core/KotlinToolingVersion.kt | 14 +++--- .../tooling/core/KotlinToolingVersionTest.kt | 49 +++++++++++++++++++ 2 files changed, 56 insertions(+), 7 deletions(-) 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 a67863027c2..f0b4f6b8ef7 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 @@ -47,10 +47,10 @@ class KotlinToolingVersion( val classifier = this.classifier?.toLowerCase(Locale.ROOT) return when { classifier == null || classifier.matches(Regex("""(release-)?\d+""")) -> Maturity.STABLE - classifier.matches(Regex("""(rc)(\d*)?-?\d*""")) -> Maturity.RC - classifier.matches(Regex("""beta(\d*)?-?\d*""")) -> Maturity.BETA - classifier.matches(Regex("""alpha(\d*)?-?\d*""")) -> Maturity.ALPHA - classifier.matches(Regex("""m\d+(-\d*)?""")) -> Maturity.MILESTONE + classifier.matches(Regex("""(rc)(\d*)?(-release)?-?\d*""")) -> Maturity.RC + 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-?\d*""")) -> Maturity.DEV classifier == "snapshot" -> Maturity.SNAPSHOT else -> throw IllegalArgumentException("Can't infer maturity of KotlinVersion $this") @@ -177,9 +177,9 @@ val KotlinToolingVersion.buildNumber: Int? return classifier.toIntOrNull() } - val classifierRegex = Regex("""(.+?)(\d*)?-?(\d*)?""") + val classifierRegex = Regex("""(.+?)(\d*)?(-release)?-?(\d*)?""") val classifierMatch = classifierRegex.matchEntire(classifier) ?: return null - return classifierMatch.groupValues.getOrNull(3)?.toIntOrNull() + return classifierMatch.groupValues.getOrNull(4)?.toIntOrNull() } val KotlinToolingVersion.classifierNumber: Int? @@ -195,7 +195,7 @@ val KotlinToolingVersion.classifierNumber: Int? } - val classifierRegex = Regex("""(.+?)(\d*)?-?(\d*)?""") + val classifierRegex = Regex("""(.+?)(\d*)?(-release)?-?(\d*)?""") val classifierMatch = classifierRegex.matchEntire(classifier) ?: return null return classifierMatch.groupValues.getOrNull(2)?.toIntOrNull() } 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 bbfe1ad3bd9..fc3cacf1800 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 @@ -189,6 +189,39 @@ class KotlinToolingVersionTest { ) } + @Test + fun maturityWithAdditionalReleaseSuffix() { + assertEquals( + KotlinToolingVersion.Maturity.MILESTONE, + KotlinToolingVersion("1.6.20-M1-release").maturity + ) + + assertEquals( + KotlinToolingVersion.Maturity.MILESTONE, + KotlinToolingVersion("1.6.20-M1-release-22").maturity + ) + + assertEquals( + KotlinToolingVersion.Maturity.ALPHA, + KotlinToolingVersion("1.6.20-alpha-release").maturity + ) + + assertEquals( + KotlinToolingVersion.Maturity.ALPHA, + KotlinToolingVersion("1.6.20-alpha-release39").maturity + ) + + assertEquals( + KotlinToolingVersion.Maturity.BETA, + KotlinToolingVersion("1.6.20-beta2-release").maturity + ) + + assertEquals( + KotlinToolingVersion.Maturity.RC, + KotlinToolingVersion("1.6.20-rc1-release").maturity + ) + } + @Test fun invalidMilestoneVersion() { val exception = assertFailsWith { KotlinToolingVersion("1.6.20-M") } @@ -203,6 +236,10 @@ class KotlinToolingVersionTest { assertEquals(510, KotlinToolingVersion("1.6.20-beta1-510").buildNumber) assertEquals(510, KotlinToolingVersion("1.6.20-alpha1-510").buildNumber) assertEquals(510, KotlinToolingVersion("1.6.20-m1-510").buildNumber) + assertEquals(510, KotlinToolingVersion("1.6.20-m1-release-510").buildNumber) + 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) } @Test @@ -216,6 +253,18 @@ class KotlinToolingVersionTest { assertEquals(2, KotlinToolingVersion("1.6.20-beta2").classifierNumber) assertEquals(2, KotlinToolingVersion("1.6.20-alpha2").classifierNumber) assertEquals(2, KotlinToolingVersion("1.6.20-m2").classifierNumber) + + assertEquals(2, KotlinToolingVersion("1.6.20-rc2-release").classifierNumber) + assertEquals(2, KotlinToolingVersion("1.6.20-rc2-release-510").classifierNumber) + assertEquals(2, KotlinToolingVersion("1.6.20-beta2-release").classifierNumber) + assertEquals(2, KotlinToolingVersion("1.6.20-beta2-release-510").classifierNumber) + assertEquals(2, KotlinToolingVersion("1.6.20-alpha2").classifierNumber) + assertEquals(2, KotlinToolingVersion("1.6.20-alpha2-release").classifierNumber) + assertEquals(2, KotlinToolingVersion("1.6.20-alpha2-release-510").classifierNumber) + assertEquals(2, KotlinToolingVersion("1.6.20-m2").classifierNumber) + assertEquals(2, KotlinToolingVersion("1.6.20-m2-release").classifierNumber) + assertEquals(2, KotlinToolingVersion("1.6.20-m2-release-510").classifierNumber) + } @Test