[tooling-core] Add KotlinToolingVersionOrNull factory function

This commit is contained in:
sebastian.sellmair
2022-05-18 14:37:53 +02:00
committed by Space
parent 7605494f2b
commit d7bfa02bb3
3 changed files with 29 additions and 20 deletions
@@ -35,6 +35,7 @@ public final class org/jetbrains/kotlin/tooling/core/KotlinToolingVersionKt {
public static final fun KotlinToolingVersion (Ljava/lang/String;)Lorg/jetbrains/kotlin/tooling/core/KotlinToolingVersion;
public static final fun KotlinToolingVersion (Lkotlin/KotlinVersion;Ljava/lang/String;)Lorg/jetbrains/kotlin/tooling/core/KotlinToolingVersion;
public static synthetic fun KotlinToolingVersion$default (Lkotlin/KotlinVersion;Ljava/lang/String;ILjava/lang/Object;)Lorg/jetbrains/kotlin/tooling/core/KotlinToolingVersion;
public static final fun KotlinToolingVersionOrNull (Ljava/lang/String;)Lorg/jetbrains/kotlin/tooling/core/KotlinToolingVersion;
public static final fun compareTo (Ljava/lang/String;Lorg/jetbrains/kotlin/tooling/core/KotlinToolingVersion;)I
public static final fun compareTo (Lorg/jetbrains/kotlin/tooling/core/KotlinToolingVersion;Ljava/lang/String;)I
public static final fun getBuildNumber (Lorg/jetbrains/kotlin/tooling/core/KotlinToolingVersion;)Ljava/lang/Integer;
@@ -3,34 +3,37 @@
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
@file:Suppress("FunctionName")
package org.jetbrains.kotlin.tooling.core
import java.io.Serializable
import java.util.*
fun KotlinToolingVersion(kotlinVersionString: String): KotlinToolingVersion {
fun throwInvalid(): Nothing {
throw IllegalArgumentException("Invalid Kotlin version: $kotlinVersionString")
}
val baseVersion = kotlinVersionString.split("-", limit = 2)[0]
val classifier = kotlinVersionString.split("-", limit = 2).getOrNull(1)
val baseVersionSplit = baseVersion.split(".")
if (!(baseVersionSplit.size == 2 || baseVersionSplit.size == 3)) throwInvalid()
return KotlinToolingVersion(
major = baseVersionSplit[0].toIntOrNull() ?: throwInvalid(),
minor = baseVersionSplit[1].toIntOrNull() ?: throwInvalid(),
patch = baseVersionSplit.getOrNull(2)?.let { it.toIntOrNull() ?: throwInvalid() } ?: 0,
classifier = classifier
)
return KotlinToolingVersionOrNull(kotlinVersionString)
?: throw IllegalArgumentException("Invalid Kotlin version: $kotlinVersionString")
}
fun KotlinToolingVersion(kotlinVersion: KotlinVersion, classifier: String? = null): KotlinToolingVersion {
return KotlinToolingVersion(kotlinVersion.major, kotlinVersion.minor, kotlinVersion.patch, classifier)
}
fun KotlinToolingVersionOrNull(kotlinVersionString: String): KotlinToolingVersion? {
val baseVersion = kotlinVersionString.split("-", limit = 2)[0]
val classifier = kotlinVersionString.split("-", limit = 2).getOrNull(1)
val baseVersionSplit = baseVersion.split(".")
if (!(baseVersionSplit.size == 2 || baseVersionSplit.size == 3)) return null
return KotlinToolingVersion(
major = baseVersionSplit[0].toIntOrNull() ?: return null,
minor = baseVersionSplit[1].toIntOrNull() ?: return null,
patch = baseVersionSplit.getOrNull(2)?.let { it.toIntOrNull() ?: return null } ?: 0,
classifier = classifier
)
}
class KotlinToolingVersion(
val major: Int,
val minor: Int,
@@ -6,10 +6,7 @@
package org.jetbrains.kotlin.tooling.core
import org.junit.Test
import kotlin.test.assertEquals
import kotlin.test.assertFailsWith
import kotlin.test.assertFalse
import kotlin.test.assertTrue
import kotlin.test.*
class KotlinToolingVersionTest {
@@ -311,4 +308,12 @@ class KotlinToolingVersionTest {
KotlinToolingVersion("1.7.0-snapshot").isSnapshot
)
}
@Test
fun illegalVersionString() {
assertFailsWith<IllegalArgumentException> { KotlinToolingVersion("x") }
assertFailsWith<IllegalArgumentException> { KotlinToolingVersion("1.6.20.1") }
assertNull(KotlinToolingVersionOrNull("x"))
assertNull(KotlinToolingVersionOrNull("1.6.20.1"))
}
}