Add LANGUAGE_VERSION test directive.

This commit is contained in:
Mads Ager
2023-05-10 13:20:30 +02:00
committed by teamcity
parent 7ac5233a32
commit fb476612af
2 changed files with 25 additions and 3 deletions
@@ -62,6 +62,19 @@ class LanguageVersionSettingsBuilder {
val languageVersion = maxOf(LanguageVersion.LATEST_STABLE, LanguageVersion.fromVersionString(apiVersion.versionString)!!)
this.languageVersion = languageVersion
}
val languageVersionDirective = directives.singleOrZeroValue(LanguageSettingsDirectives.LANGUAGE_VERSION)
if (languageVersionDirective != null) {
languageVersion = languageVersionDirective
if (languageVersion < LanguageVersion.fromVersionString(this.apiVersion.versionString)!!) {
error(
"""
Language version must be larger than or equal to the API version.
Language version: '$languageVersion'.
API version: '$apiVersion'.
""".trimIndent()
)
}
}
when {
useK2 && this.languageVersion < LanguageVersion.KOTLIN_2_0 -> this.languageVersion = LanguageVersion.KOTLIN_2_0
!useK2 && this.languageVersion > LanguageVersion.KOTLIN_1_9 -> this.languageVersion = LanguageVersion.KOTLIN_1_9
@@ -5,9 +5,7 @@
package org.jetbrains.kotlin.test.directives
import org.jetbrains.kotlin.config.ApiVersion
import org.jetbrains.kotlin.config.ExplicitApiMode
import org.jetbrains.kotlin.config.JvmDefaultMode
import org.jetbrains.kotlin.config.*
import org.jetbrains.kotlin.test.directives.model.SimpleDirectivesContainer
object LanguageSettingsDirectives : SimpleDirectivesContainer() {
@@ -22,6 +20,12 @@ object LanguageSettingsDirectives : SimpleDirectivesContainer() {
description = "Version of Kotlin API",
parser = this::parseApiVersion
)
val LANGUAGE_VERSION by valueDirective<LanguageVersion>(
description = "Kotlin language version",
parser = this::parseLanguageVersion
)
// --------------------- Analysis Flags ---------------------
val OPT_IN by stringDirective(
@@ -89,4 +93,9 @@ object LanguageSettingsDirectives : SimpleDirectivesContainer() {
"LATEST_STABLE" -> ApiVersion.LATEST_STABLE
else -> ApiVersion.parse(versionString) ?: error("Unknown API version: $versionString")
}
fun parseLanguageVersion(versionString: String): LanguageVersion = when (versionString) {
"LATEST_STABLE" -> LanguageVersion.LATEST_STABLE
else -> LanguageVersion.fromVersionString(versionString) ?: error("Unknown language version: $versionString")
}
}