K2: move -Xuse-k2 VS language version checks to CommonCompilerArguments

This commit is contained in:
Mikhail Glukhikh
2023-01-09 15:39:06 +01:00
parent 7a61578e08
commit 70fc891260
5 changed files with 32 additions and 45 deletions
@@ -602,10 +602,7 @@ abstract class CommonCompilerArguments : CommonToolArguments() {
collector: MessageCollector,
additionalAnalysisFlags: Map<AnalysisFlag<*>, Any>
): LanguageVersionSettings {
// If only "-api-version" is specified, language version is assumed to be the latest stable
val languageVersion = parseVersion(collector, languageVersion, "language")
?: defaultLanguageVersion(collector)
val languageVersion = parseOrConfigureLanguageVersion(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)
val apiVersion = ApiVersion.createByLanguageVersion(parseVersion(collector, apiVersion, "API") ?: languageVersion)
@@ -709,6 +706,37 @@ abstract class CommonCompilerArguments : CommonToolArguments() {
LANGUAGE("Language"), API("API")
}
private fun parseOrConfigureLanguageVersion(collector: MessageCollector): LanguageVersion {
// If only "-api-version" is specified, language version is assumed to be the latest stable (or 2.0 with -Xuse-k2)
val explicitVersion = parseVersion(collector, languageVersion, "language")
val explicitOrDefaultVersion = explicitVersion ?: defaultLanguageVersion(collector)
if (useK2) {
when {
explicitVersion?.usesK2 == true -> {
collector.report(
CompilerMessageSeverity.STRONG_WARNING,
"Compiler flag -Xuse-k2 is redundant, the \"-language-version 2.0\" is used instead"
)
}
explicitVersion != null -> {
collector.report(
CompilerMessageSeverity.STRONG_WARNING,
"With -Xuse-k2 compiler flag \"-language-version $explicitVersion\" has no effect," +
" please remove -Xuse-k2 flag and use \"-language-version 2.0\" instead"
)
}
else -> {
collector.report(
CompilerMessageSeverity.STRONG_WARNING,
"Compiler flag -Xuse-k2 is deprecated, please use \"-language-version 2.0\" instead"
)
}
}
}
return if (useK2 && !explicitOrDefaultVersion.usesK2) LanguageVersion.KOTLIN_2_0
else explicitOrDefaultVersion
}
private fun parseVersion(collector: MessageCollector, value: String?, versionOf: String): LanguageVersion? =
if (value == null) null
else LanguageVersion.fromVersionString(value)
@@ -97,36 +97,6 @@ abstract class CLICompiler<A : CommonCompilerArguments> : CLITool<A>() {
try {
setIdeaIoUseFallback()
val useK2FromFlag = arguments.useK2
val languageVersion = configuration.languageVersionSettings.languageVersion
if (useK2FromFlag) {
when {
arguments.languageVersion == null -> {
messageCollector.report(
STRONG_WARNING,
"Compiler flag -Xuse-k2 is deprecated, please use \"-language-version 2.0\" instead"
)
}
languageVersion.usesK2 -> {
messageCollector.report(
STRONG_WARNING,
"Compiler flag -Xuse-k2 is redundant, the \"-language-version 2.0\" is used instead"
)
}
else -> {
messageCollector.report(
STRONG_WARNING,
"With -Xuse-k2 compiler flag \"-language-version $languageVersion\" has no effect, please remove -Xuse-k2 flag and use \"-language-version 2.0\" instead"
)
}
}
if (!languageVersion.usesK2) {
val languageVersionSettings = configuration.languageVersionSettings
configuration.languageVersionSettings = languageVersionSettings.copy(LanguageVersion.KOTLIN_2_0)
arguments.checkLanguageVersionIsStable(LanguageVersion.KOTLIN_2_0, messageCollector)
}
}
val code = doExecute(arguments, configuration, rootDisposable, paths)
performanceManager.notifyCompilationFinished()