[K/N] Remove old Compiler and Meta Version ^KT-55677 Fixed

* Replace it with KotlinCompilerVersion
* K/N version should be set now with `deployVersion`.
* Cleanup deprecated functions in older versions
 of the Gradle plugin
* Cleanup tests for older versions of compiler downloader

Merge-request: KT-MR-8436
Merged-by: Pavel Punegov <Pavel.Punegov@jetbrains.com>
This commit is contained in:
Pavel Punegov
2023-01-30 13:10:08 +00:00
committed by Space Team
parent 5ec626b29d
commit c9aeadd31f
33 changed files with 79 additions and 727 deletions
@@ -1,86 +0,0 @@
/*
* Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.konan
import java.io.Serializable
interface CompilerVersion : Serializable {
val meta: MetaVersion
val major: Int
val minor: Int
val maintenance: Int
@Deprecated("Milestone is deprecated in favour to MetaVersion's M1 and M2")
val milestone: Int
val build: Int
fun toString(showMeta: Boolean, showBuild: Boolean): String
companion object {
// major.minor.patch-meta-build where patch, meta and build are optional.
val versionPattern = "(\\d+)\\.(\\d+)(?:\\.(\\d+))?(?:-(\\p{Alpha}*\\p{Alnum}|[\\p{Alpha}-]*))?(?:-(\\d+))?".toRegex()
fun fromString(version: String): CompilerVersion {
val (major, minor, maintenance, metaString, build) =
versionPattern.matchEntire(version)?.destructured
?: throw IllegalArgumentException("Cannot parse Kotlin/Native version: $version")
return CompilerVersionImpl(
MetaVersion.findAppropriate(metaString),
major.toInt(),
minor.toInt(),
maintenance.toIntOrNull() ?: 0,
-1,
build.toIntOrNull() ?: -1
)
}
}
}
fun String.parseCompilerVersion() = CompilerVersion.fromString(this)
data class CompilerVersionImpl(
override val meta: MetaVersion = MetaVersion.DEV,
override val major: Int,
override val minor: Int,
override val maintenance: Int,
@Deprecated("Milestone is deprecated in favour to MetaVersion's M1 and M2")
override val milestone: Int = -1,
override val build: Int = -1
) : CompilerVersion {
override fun toString(showMeta: Boolean, showBuild: Boolean) = buildString {
append(major)
append('.')
append(minor)
append('.')
append(maintenance)
if (showMeta) {
append('-')
append(meta.metaString)
}
if (showBuild && build != -1) {
append('-')
append(build)
}
}
private val isRelease: Boolean
get() = meta == MetaVersion.RELEASE
private val versionString by lazy { toString(!isRelease, true) }
override fun toString() = versionString
}
fun CompilerVersion.isAtLeast(compilerVersion: CompilerVersion): Boolean {
if (this.major != compilerVersion.major) return this.major > compilerVersion.major
if (this.minor != compilerVersion.minor) return this.minor > compilerVersion.minor
if (this.maintenance != compilerVersion.maintenance) return this.maintenance > compilerVersion.maintenance
if (this.meta != compilerVersion.meta) return this.meta > compilerVersion.meta
return this.build >= compilerVersion.build
}
@@ -1,34 +0,0 @@
/*
* Copyright 2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.konan
inline class MetaVersion(val metaString: String) {
operator fun compareTo(other: MetaVersion): Int {
if (metaOrder.contains(this)) {
if (metaOrder.contains(other)) {
return metaOrder.indexOf(this).compareTo(metaOrder.indexOf(other))
}
}
return metaString.compareTo(other.metaString)
}
companion object {
// Following meta versions are left for source-level compatibility
val DEV = MetaVersion("dev")
val DEV_GOOGLE = MetaVersion("dev-google-pr")
val EAP = MetaVersion("eap")
val BETA = MetaVersion("Beta")
val RC = MetaVersion("RC")
val PUB = MetaVersion("PUB")
val RELEASE = MetaVersion("release")
// Defines order of meta versions
private val metaOrder = listOf(DEV, DEV_GOOGLE, EAP, BETA, RC, PUB, RELEASE)
fun findAppropriate(metaString: String): MetaVersion = metaOrder
.find { it.metaString.equals(metaString, ignoreCase = true) }
?: if (metaString.isBlank()) RELEASE else MetaVersion(metaString) // should it be lowercased?
}
}
@@ -1,160 +0,0 @@
/*
* Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
*/
package org.jetbrains.kotlin.native
import org.jetbrains.kotlin.konan.*
import org.junit.Assert.assertEquals
import org.junit.Test
import kotlin.test.*
class NativeCompilerVersionTest {
@Test
fun versionParseTest() {
"1.5.30-dev-1".parseCompilerVersion().apply {
assertEquals(1, major)
assertEquals(5, minor)
assertEquals(30, maintenance)
assertEquals(MetaVersion.DEV, meta)
assertEquals(1, build)
}
"1.5.30-rc-12".parseCompilerVersion().apply {
assertEquals(1, major)
assertEquals(5, minor)
assertEquals(30, maintenance)
assertEquals(MetaVersion.RC, meta)
assertEquals(12, build)
}
// Final release
"1.5.30".parseCompilerVersion().apply {
assertEquals(1, major)
assertEquals(5, minor)
assertEquals(30, maintenance)
assertEquals(MetaVersion.RELEASE, meta)
assertEquals(-1, build)
}
// Final release build.number
"1.5.30-release-34".parseCompilerVersion().apply {
assertEquals(1, major)
assertEquals(5, minor)
assertEquals(30, maintenance)
assertEquals(MetaVersion.RELEASE, meta)
assertEquals(34, build)
}
// Release builds
"1.5.30-1234".parseCompilerVersion().apply {
assertEquals(1, major)
assertEquals(5, minor)
assertEquals(30, maintenance)
assertEquals(MetaVersion.RELEASE, meta)
assertEquals(1234, build)
}
"1.6.0-dev-1".parseCompilerVersion().apply {
assertEquals(1, major)
assertEquals(6, minor)
assertEquals(0, maintenance)
assertEquals(MetaVersion.DEV, meta)
assertEquals(1, build)
}
"1.6.10-RC".parseCompilerVersion().apply {
assertEquals(1, major)
assertEquals(6, minor)
assertEquals(10, maintenance)
assertEquals(MetaVersion.RC, meta)
assertEquals(-1, build)
}
}
@Test
fun incorrectVersionString() {
assertFailsWith<IllegalArgumentException> { CompilerVersion.fromString("1.5.30-M1-dev-123") }
assertFailsWith<IllegalArgumentException> { CompilerVersion.fromString("1.5.30-M1-release-123") }
assertFailsWith<IllegalArgumentException> { CompilerVersion.fromString("1.5.30.40-release-123") }
}
@Test
fun versionToString() {
assertEquals("1.5.30-dev-140", CompilerVersionImpl(MetaVersion.DEV, 1, 5, 30, -1, 140).toString())
assertEquals("1.5.30-RC-140", CompilerVersionImpl(MetaVersion.RC, 1, 5, 30, -1, 140).toString())
assertEquals("1.5.30-RC", CompilerVersionImpl(MetaVersion.RC, 1, 5, 30, -1, -1).toString())
assertEquals("1.6.10-14", CompilerVersionImpl(MetaVersion.RELEASE, 1, 6, 10, -1, 14).toString())
assertEquals("1.6.10-14", CompilerVersionImpl(MetaVersion.RELEASE, 1, 6, 10, -1, 14).toString())
assertEquals("1.6.0", CompilerVersionImpl(MetaVersion.RELEASE, 1, 6, 0, -1, -1).toString())
}
@Test
fun publicVersion() {
"1.5.30-dev-google-pr-123".parseCompilerVersion().apply {
assertEquals(1, major)
assertEquals(5, minor)
assertEquals(30, maintenance)
assertEquals(MetaVersion.DEV_GOOGLE, meta)
assertEquals(123, build)
}
assertEquals("1.5.30-dev-google-pr-140", CompilerVersionImpl(MetaVersion.DEV_GOOGLE, 1, 5, 30, -1, 140).toString())
"1.5.30-pub-123".parseCompilerVersion().apply {
assertEquals(1, major)
assertEquals(5, minor)
assertEquals(30, maintenance)
assertEquals(MetaVersion.PUB, meta)
assertEquals(123, build)
}
assertEquals("1.5.30-PUB-140", CompilerVersionImpl(MetaVersion.PUB, 1, 5, 30, -1, 140).toString())
}
@Test
fun betasAndRCs() {
"1.7.0-RC".parseCompilerVersion().apply {
assertEquals(1, major)
assertEquals(7, minor)
assertEquals(0, maintenance)
assertEquals(MetaVersion.RC, meta)
assertEquals(-1, build)
}
"1.7.0-RC2".parseCompilerVersion().apply {
assertEquals(1, major)
assertEquals(7, minor)
assertEquals(0, maintenance)
assertEquals(MetaVersion("RC2"), meta)
assertEquals(-1, build)
}
"1.7.0-RC2-123".parseCompilerVersion().apply {
assertEquals(1, major)
assertEquals(7, minor)
assertEquals(0, maintenance)
assertEquals(MetaVersion("RC2"), meta)
assertEquals(123, build)
}
"1.7.0-Beta".parseCompilerVersion().apply {
assertEquals(1, major)
assertEquals(7, minor)
assertEquals(0, maintenance)
assertEquals(MetaVersion.BETA, meta)
assertEquals(-1, build)
}
"1.7.0-Beta2".parseCompilerVersion().apply {
assertEquals(1, major)
assertEquals(7, minor)
assertEquals(0, maintenance)
assertEquals(MetaVersion("Beta2"), meta)
assertEquals(-1, build)
}
}
@Test
fun metaVersionOrder() {
assertTrue("1.7.0-RC2".parseCompilerVersion().isAtLeast("1.7.0-RC".parseCompilerVersion()))
assertTrue("1.7.0-RC".parseCompilerVersion().isAtLeast("1.7.0-BETA".parseCompilerVersion()))
assertTrue("1.7.0-RC".parseCompilerVersion().isAtLeast("1.7.0-BETA2".parseCompilerVersion()))
assertTrue("1.7.0-RC2".parseCompilerVersion().isAtLeast("1.7.0-BETA3".parseCompilerVersion()))
assertTrue("1.7.0-release".parseCompilerVersion().isAtLeast("1.7.0-RC".parseCompilerVersion()))
assertTrue("1.7.0-release".parseCompilerVersion().isAtLeast("1.7.0-RC3".parseCompilerVersion()))
assertTrue("1.7.0-release".parseCompilerVersion().isAtLeast("1.7.0-dev-1234".parseCompilerVersion()))
assertTrue("1.7.0-eap1".parseCompilerVersion().isAtLeast("1.7.0-eap".parseCompilerVersion()))
assertTrue("1.7.0-eap1".parseCompilerVersion().isAtLeast("1.7.0-eap-134".parseCompilerVersion()))
}
}
@@ -1,6 +1,5 @@
package org.jetbrains.kotlin.library
import org.jetbrains.kotlin.konan.CompilerVersion
import org.jetbrains.kotlin.konan.file.File
import org.jetbrains.kotlin.library.impl.createKotlinLibraryComponents
import org.jetbrains.kotlin.library.impl.isPre_1_4_Library
@@ -223,12 +222,6 @@ abstract class KotlinLibrarySearchPathResolver<L : KotlinLibrary>(
}
}
fun CompilerVersion.compatible(other: CompilerVersion) =
this.major == other.major
&& this.minor == other.minor
&& this.maintenance == other.maintenance
// This is a library resolver aware of attributes shared between platforms,
// such as abi version.
// JS and Native resolvers are inherited from this one.