From fb476612af6e392b1c73a4d10c76a2128e101d49 Mon Sep 17 00:00:00 2001 From: Mads Ager Date: Wed, 10 May 2023 13:20:30 +0200 Subject: [PATCH] Add LANGUAGE_VERSION test directive. --- .../builders/LanguageVersionSettingsBuilder.kt | 13 +++++++++++++ .../test/directives/LanguageSettingsDirectives.kt | 15 ++++++++++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/compiler/test-infrastructure/tests/org/jetbrains/kotlin/test/builders/LanguageVersionSettingsBuilder.kt b/compiler/test-infrastructure/tests/org/jetbrains/kotlin/test/builders/LanguageVersionSettingsBuilder.kt index 271d7dded6d..fdb6b133c63 100644 --- a/compiler/test-infrastructure/tests/org/jetbrains/kotlin/test/builders/LanguageVersionSettingsBuilder.kt +++ b/compiler/test-infrastructure/tests/org/jetbrains/kotlin/test/builders/LanguageVersionSettingsBuilder.kt @@ -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 diff --git a/compiler/test-infrastructure/tests/org/jetbrains/kotlin/test/directives/LanguageSettingsDirectives.kt b/compiler/test-infrastructure/tests/org/jetbrains/kotlin/test/directives/LanguageSettingsDirectives.kt index b8563e89064..46c8129cd32 100644 --- a/compiler/test-infrastructure/tests/org/jetbrains/kotlin/test/directives/LanguageSettingsDirectives.kt +++ b/compiler/test-infrastructure/tests/org/jetbrains/kotlin/test/directives/LanguageSettingsDirectives.kt @@ -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( + 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") + } }