Fix regex in KotlinPluginCompatibilityVerifier to support release and milestones
This commit is contained in:
@@ -8,11 +8,13 @@ package org.jetbrains.kotlin.idea
|
||||
import com.intellij.openapi.application.ApplicationInfo
|
||||
import com.intellij.openapi.ui.Messages
|
||||
import com.intellij.util.PlatformUtils
|
||||
import com.intellij.util.text.nullize
|
||||
import org.intellij.lang.annotations.RegExp
|
||||
|
||||
object KotlinPluginCompatibilityVerifier {
|
||||
@JvmStatic
|
||||
fun checkCompatibility() {
|
||||
val kotlinVersion = KotlinPluginVersion.parse(KotlinPluginUtil.getPluginVersion()) ?: return
|
||||
val kotlinVersion = KotlinPluginVersion.getCurrent() ?: return
|
||||
val platformVersion = PlatformVersion.getCurrent() ?: return
|
||||
|
||||
if (kotlinVersion.platformVersion.platform != platformVersion.platform) {
|
||||
@@ -26,20 +28,38 @@ object KotlinPluginCompatibilityVerifier {
|
||||
|
||||
data class KotlinPluginVersion(
|
||||
val kotlinVersion: String, // 1.2.3
|
||||
val milestone: String?, // M1
|
||||
val status: String, // release, eap, rc
|
||||
val buildNumber: String, // 53
|
||||
val buildNumber: String?, // 53
|
||||
val platformVersion: PlatformVersion,
|
||||
val patchNumber: String // usually '1'
|
||||
) {
|
||||
companion object {
|
||||
private val KOTLIN_VERSION_REGEX = "^([\\d.]+)-([A-Za-z]+)-(\\d+)-([A-Za-z0-9.]+)-(\\d+)$".toRegex()
|
||||
private const val KOTLIN_VERSION_REGEX_STRING =
|
||||
"^([\\d.]+)" + // Version number, like 1.3.50
|
||||
"(?:-(M\\d+))?" + // (Optional) M-release, like M2
|
||||
"-([A-Za-z]+)" + // status, like 'eap/dev/release'
|
||||
"(?:-(\\d+))?" + // (Optional) buildNumber (absent for 'release')
|
||||
"-([A-Za-z0-9.]+)" + // Platform version, like Studio4.0.1
|
||||
"-(\\d+)$" // Tooling update, like '-1'
|
||||
|
||||
private val KOTLIN_VERSION_REGEX = KOTLIN_VERSION_REGEX_STRING.toRegex()
|
||||
|
||||
fun parse(version: String): KotlinPluginVersion? {
|
||||
val matchResult = KOTLIN_VERSION_REGEX.matchEntire(version) ?: return null
|
||||
val (kotlinVersion, status, buildNumber, platformString, patchNumber) = matchResult.destructured
|
||||
val (kotlinVersion, milestone, status, buildNumber, platformString, patchNumber) = matchResult.destructured
|
||||
val platformVersion = PlatformVersion.parse(platformString) ?: return null
|
||||
return KotlinPluginVersion(kotlinVersion, status, buildNumber, platformVersion, patchNumber)
|
||||
return KotlinPluginVersion(
|
||||
kotlinVersion,
|
||||
milestone.nullize(),
|
||||
status,
|
||||
buildNumber.nullize(),
|
||||
platformVersion,
|
||||
patchNumber
|
||||
)
|
||||
}
|
||||
|
||||
fun getCurrent(): KotlinPluginVersion? = parse(KotlinPluginUtil.getPluginVersion())
|
||||
}
|
||||
|
||||
override fun toString() = "$kotlinVersion for $platformVersion"
|
||||
@@ -75,16 +95,4 @@ data class PlatformVersion(val platform: Platform, val version: String /* 3.1 or
|
||||
}
|
||||
|
||||
override fun toString() = platform.presentableText + " " + version
|
||||
}
|
||||
|
||||
val KotlinPluginVersion.isSnapshot: Boolean
|
||||
get() = status == "SNAPSHOT"
|
||||
|
||||
val KotlinPluginVersion.majorVersion: String
|
||||
get() = kotlinVersion.split(".").first()
|
||||
|
||||
val KotlinPluginVersion.minorVersion: String
|
||||
get() = kotlinVersion.split(".")[1]
|
||||
|
||||
val KotlinPluginVersion.patchVersion: String
|
||||
get() = kotlinVersion.split(".").last()
|
||||
}
|
||||
@@ -6,6 +6,7 @@
|
||||
package org.jetbrains.kotlin.test
|
||||
|
||||
import com.intellij.testFramework.LightPlatformTestCase
|
||||
import org.jetbrains.kotlin.idea.KotlinPluginUtil
|
||||
import org.jetbrains.kotlin.idea.KotlinPluginVersion
|
||||
import org.jetbrains.kotlin.idea.PlatformVersion
|
||||
import org.junit.runner.RunWith
|
||||
@@ -16,6 +17,7 @@ class CompatibilityVerifierVersionComparisonTest : LightPlatformTestCase() {
|
||||
val version = KotlinPluginVersion.parse("1.2.40-dev-193-Studio3.0-1") ?: throw AssertionError("Version should not be null")
|
||||
|
||||
assertEquals("1.2.40", version.kotlinVersion)
|
||||
assertNull(version.milestone)
|
||||
assertEquals("dev", version.status)
|
||||
assertEquals("193", version.buildNumber)
|
||||
assertEquals(PlatformVersion.Platform.ANDROID_STUDIO, version.platformVersion.platform)
|
||||
@@ -23,7 +25,32 @@ class CompatibilityVerifierVersionComparisonTest : LightPlatformTestCase() {
|
||||
assertEquals("1", version.patchNumber)
|
||||
}
|
||||
|
||||
fun testReleaseVersionDoesntHaveBuildNumber() {
|
||||
val version = KotlinPluginVersion.parse("1.2.40-release-Studio3.0-1") ?: throw AssertionError("Version should not be null")
|
||||
|
||||
assertNull(version.buildNumber)
|
||||
}
|
||||
|
||||
fun testMilestoneVersion() {
|
||||
val version = KotlinPluginVersion.parse("1.4-M1-eap-27-IJ2020.1-1") ?: throw AssertionError("Version should not be null")
|
||||
|
||||
assertEquals("1.4", version.kotlinVersion)
|
||||
assertEquals("M1", version.milestone)
|
||||
assertEquals("eap", version.status)
|
||||
assertEquals("27", version.buildNumber)
|
||||
assertEquals(PlatformVersion.Platform.IDEA, version.platformVersion.platform)
|
||||
assertEquals("2020.1", version.platformVersion.version)
|
||||
assertEquals("1", version.patchNumber)
|
||||
}
|
||||
|
||||
fun testPlatformVersionParsing() {
|
||||
PlatformVersion.getCurrent() ?: throw AssertionError("Version should not be null")
|
||||
}
|
||||
|
||||
fun testCurrentPluginVersionParsing() {
|
||||
val pluginVersion = KotlinPluginUtil.getPluginVersion()
|
||||
if (pluginVersion == "@snapshot@") return
|
||||
|
||||
assertNotNull("Can not parse current Kotlin Plugin version: $pluginVersion", KotlinPluginVersion.getCurrent())
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user