Prohibit using old JVM backend with LV >= 1.6

#KT-48928 Fixed
This commit is contained in:
Alexander Udalov
2021-09-28 22:13:33 +02:00
parent e933c7b6d9
commit aa247726b6
10 changed files with 55 additions and 3 deletions
@@ -531,9 +531,9 @@ abstract class CommonCompilerArguments : CommonToolArguments() {
}
fun toLanguageVersionSettings(collector: MessageCollector): LanguageVersionSettings {
// If only "-api-version" is specified, language version is assumed to be the latest stable
val languageVersion = parseVersion(collector, languageVersion, "language") ?: LanguageVersion.LATEST_STABLE
val languageVersion = parseVersion(collector, languageVersion, "language")
?: defaultLanguageVersion(collector)
// If only "-language-version" is specified, API version is assumed to be equal to the language version
// (API version cannot be greater than the language version)
@@ -554,6 +554,8 @@ abstract class CommonCompilerArguments : CommonToolArguments() {
checkProgressiveMode(languageVersion, collector)
}
checkPlatformSpecificSettings(languageVersionSettings, collector)
return languageVersionSettings
}
@@ -622,6 +624,12 @@ abstract class CommonCompilerArguments : CommonToolArguments() {
}
}
protected open fun defaultLanguageVersion(collector: MessageCollector): LanguageVersion =
LanguageVersion.LATEST_STABLE
protected open fun checkPlatformSpecificSettings(languageVersionSettings: LanguageVersionSettings, collector: MessageCollector) {
}
private enum class VersionKind(val text: String) {
LANGUAGE("Language"), API("API")
}
@@ -534,4 +534,26 @@ default: `indy-with-constants` for JVM target 9 or greater, `inline` otherwise""
}
return result
}
override fun defaultLanguageVersion(collector: MessageCollector): LanguageVersion =
if (useOldBackend) {
if (!suppressVersionWarnings) {
collector.report(
CompilerMessageSeverity.STRONG_WARNING,
"Language version is automatically inferred to ${LanguageVersion.KOTLIN_1_5.versionString} when using " +
"the old JVM backend. Consider specifying -language-version explicitly, or remove -Xuse-old-backend"
)
}
LanguageVersion.KOTLIN_1_5
} else super.defaultLanguageVersion(collector)
override fun checkPlatformSpecificSettings(languageVersionSettings: LanguageVersionSettings, collector: MessageCollector) {
if (useOldBackend && languageVersionSettings.languageVersion >= LanguageVersion.KOTLIN_1_6) {
collector.report(
CompilerMessageSeverity.ERROR,
"Old JVM backend does not support language version 1.6 or above. " +
"Please use language version 1.5 or below, or remove -Xuse-old-backend"
)
}
}
}