From 4644562e7f3d64113d08695849dac2ea72a7bbc2 Mon Sep 17 00:00:00 2001 From: Pavel Punegov Date: Thu, 17 Feb 2022 12:54:54 +0300 Subject: [PATCH] [K/N][build] Change MetaVersion to inline class from enum Support meta versions strings other than pre-defined. All enum entries were left for source-level compatibility. --- compiler/util-io/build.gradle.kts | 2 +- .../org/jetbrains/kotlin/konan/MetaVersion.kt | 34 ++++++++-------- .../native/NativeCompilerVersionTest.kt | 40 ++++++++++++++++++- .../src/VersionGenerator.kt | 4 +- 4 files changed, 59 insertions(+), 21 deletions(-) diff --git a/compiler/util-io/build.gradle.kts b/compiler/util-io/build.gradle.kts index 27a85a4be0b..29fe5bd2294 100644 --- a/compiler/util-io/build.gradle.kts +++ b/compiler/util-io/build.gradle.kts @@ -19,7 +19,7 @@ tasks { kotlinOptions { languageVersion = "1.4" apiVersion = "1.4" - freeCompilerArgs += "-Xsuppress-version-warnings" + freeCompilerArgs += listOf("-Xsuppress-version-warnings", "-Xinline-classes") } } } diff --git a/compiler/util-io/src/org/jetbrains/kotlin/konan/MetaVersion.kt b/compiler/util-io/src/org/jetbrains/kotlin/konan/MetaVersion.kt index 9dd8809282a..16a8e4c5bbf 100644 --- a/compiler/util-io/src/org/jetbrains/kotlin/konan/MetaVersion.kt +++ b/compiler/util-io/src/org/jetbrains/kotlin/konan/MetaVersion.kt @@ -1,25 +1,25 @@ /* - * Copyright 2010-2018 JetBrains s.r.o. and Kotlin Programming Language contributors. + * 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 -enum class MetaVersion(val metaString: String) { - DEV("dev"), - DEV_GOOGLE("dev-google-pr"), - EAP("eap"), - BETA("beta"), - M1("M1"), - M2("M2"), - RC("RC"), - PUB("PUB"), - RELEASE("release"); - +inline class MetaVersion(val metaString: String) { companion object { - fun findAppropriate(metaString: String): MetaVersion { - return values().find { it.metaString.equals(metaString, ignoreCase = true) } - ?: if (metaString.isBlank()) RELEASE else error("Unknown meta version: $metaString") - } + // 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 M1 = MetaVersion("M1") + val M2 = MetaVersion("M2") + val RC = MetaVersion("RC") + val PUB = MetaVersion("PUB") + val RELEASE = MetaVersion("release") + + fun findAppropriate(metaString: String): MetaVersion = + listOf(DEV, DEV_GOOGLE, EAP, BETA, M1, M2, RC, PUB, RELEASE) + .find { it.metaString.equals(metaString, ignoreCase = true) } + ?: if (metaString.isBlank()) RELEASE else MetaVersion(metaString) } } diff --git a/compiler/util-io/test/org/jetbrains/kotlin/native/NativeCompilerVersionTest.kt b/compiler/util-io/test/org/jetbrains/kotlin/native/NativeCompilerVersionTest.kt index 1edf18317ab..a30086c5141 100644 --- a/compiler/util-io/test/org/jetbrains/kotlin/native/NativeCompilerVersionTest.kt +++ b/compiler/util-io/test/org/jetbrains/kotlin/native/NativeCompilerVersionTest.kt @@ -90,7 +90,6 @@ class NativeCompilerVersionTest { assertFailsWith { CompilerVersion.fromString("1.5.30-M1-dev-123") } assertFailsWith { CompilerVersion.fromString("1.5.30-M1-release-123") } assertFailsWith { CompilerVersion.fromString("1.5.30.40-release-123") } - assertFailsWith { CompilerVersion.fromString("1.6.0-M3-123") } } @Test @@ -123,4 +122,43 @@ class NativeCompilerVersionTest { } 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) + } + } } \ No newline at end of file diff --git a/dependencies/kotlin-build-gradle-plugin/src/VersionGenerator.kt b/dependencies/kotlin-build-gradle-plugin/src/VersionGenerator.kt index 061175327ff..5f50be0e8f4 100644 --- a/dependencies/kotlin-build-gradle-plugin/src/VersionGenerator.kt +++ b/dependencies/kotlin-build-gradle-plugin/src/VersionGenerator.kt @@ -81,9 +81,9 @@ open class VersionGenerator : DefaultTask() { @Input open val buildNumber = project.findProperty("build.number")?.toString() - @Input + @get:Input open val meta = (project.findProperty("konanMetaVersion") as? String - ?: kotlinNativeProperties["konanMetaVersion"])?.let { MetaVersion.valueOf(it.toString().toUpperCase()) } + ?: kotlinNativeProperties["konanMetaVersion"])?.let { MetaVersion.findAppropriate(it.toString()) } ?: MetaVersion.DEV fun defaultVersionFileLocation() {