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.application.ApplicationInfo
|
||||||
import com.intellij.openapi.ui.Messages
|
import com.intellij.openapi.ui.Messages
|
||||||
import com.intellij.util.PlatformUtils
|
import com.intellij.util.PlatformUtils
|
||||||
|
import com.intellij.util.text.nullize
|
||||||
|
import org.intellij.lang.annotations.RegExp
|
||||||
|
|
||||||
object KotlinPluginCompatibilityVerifier {
|
object KotlinPluginCompatibilityVerifier {
|
||||||
@JvmStatic
|
@JvmStatic
|
||||||
fun checkCompatibility() {
|
fun checkCompatibility() {
|
||||||
val kotlinVersion = KotlinPluginVersion.parse(KotlinPluginUtil.getPluginVersion()) ?: return
|
val kotlinVersion = KotlinPluginVersion.getCurrent() ?: return
|
||||||
val platformVersion = PlatformVersion.getCurrent() ?: return
|
val platformVersion = PlatformVersion.getCurrent() ?: return
|
||||||
|
|
||||||
if (kotlinVersion.platformVersion.platform != platformVersion.platform) {
|
if (kotlinVersion.platformVersion.platform != platformVersion.platform) {
|
||||||
@@ -26,20 +28,38 @@ object KotlinPluginCompatibilityVerifier {
|
|||||||
|
|
||||||
data class KotlinPluginVersion(
|
data class KotlinPluginVersion(
|
||||||
val kotlinVersion: String, // 1.2.3
|
val kotlinVersion: String, // 1.2.3
|
||||||
|
val milestone: String?, // M1
|
||||||
val status: String, // release, eap, rc
|
val status: String, // release, eap, rc
|
||||||
val buildNumber: String, // 53
|
val buildNumber: String?, // 53
|
||||||
val platformVersion: PlatformVersion,
|
val platformVersion: PlatformVersion,
|
||||||
val patchNumber: String // usually '1'
|
val patchNumber: String // usually '1'
|
||||||
) {
|
) {
|
||||||
companion object {
|
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? {
|
fun parse(version: String): KotlinPluginVersion? {
|
||||||
val matchResult = KOTLIN_VERSION_REGEX.matchEntire(version) ?: return null
|
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
|
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"
|
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
|
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
|
package org.jetbrains.kotlin.test
|
||||||
|
|
||||||
import com.intellij.testFramework.LightPlatformTestCase
|
import com.intellij.testFramework.LightPlatformTestCase
|
||||||
|
import org.jetbrains.kotlin.idea.KotlinPluginUtil
|
||||||
import org.jetbrains.kotlin.idea.KotlinPluginVersion
|
import org.jetbrains.kotlin.idea.KotlinPluginVersion
|
||||||
import org.jetbrains.kotlin.idea.PlatformVersion
|
import org.jetbrains.kotlin.idea.PlatformVersion
|
||||||
import org.junit.runner.RunWith
|
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")
|
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)
|
assertEquals("1.2.40", version.kotlinVersion)
|
||||||
|
assertNull(version.milestone)
|
||||||
assertEquals("dev", version.status)
|
assertEquals("dev", version.status)
|
||||||
assertEquals("193", version.buildNumber)
|
assertEquals("193", version.buildNumber)
|
||||||
assertEquals(PlatformVersion.Platform.ANDROID_STUDIO, version.platformVersion.platform)
|
assertEquals(PlatformVersion.Platform.ANDROID_STUDIO, version.platformVersion.platform)
|
||||||
@@ -23,7 +25,32 @@ class CompatibilityVerifierVersionComparisonTest : LightPlatformTestCase() {
|
|||||||
assertEquals("1", version.patchNumber)
|
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() {
|
fun testPlatformVersionParsing() {
|
||||||
PlatformVersion.getCurrent() ?: throw AssertionError("Version should not be null")
|
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