K2: move -Xuse-k2 VS language version checks to CommonCompilerArguments
This commit is contained in:
+32
-4
@@ -602,10 +602,7 @@ abstract class CommonCompilerArguments : CommonToolArguments() {
|
|||||||
collector: MessageCollector,
|
collector: MessageCollector,
|
||||||
additionalAnalysisFlags: Map<AnalysisFlag<*>, Any>
|
additionalAnalysisFlags: Map<AnalysisFlag<*>, Any>
|
||||||
): LanguageVersionSettings {
|
): LanguageVersionSettings {
|
||||||
// If only "-api-version" is specified, language version is assumed to be the latest stable
|
val languageVersion = parseOrConfigureLanguageVersion(collector)
|
||||||
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
|
// 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)
|
// (API version cannot be greater than the language version)
|
||||||
val apiVersion = ApiVersion.createByLanguageVersion(parseVersion(collector, apiVersion, "API") ?: languageVersion)
|
val apiVersion = ApiVersion.createByLanguageVersion(parseVersion(collector, apiVersion, "API") ?: languageVersion)
|
||||||
@@ -709,6 +706,37 @@ abstract class CommonCompilerArguments : CommonToolArguments() {
|
|||||||
LANGUAGE("Language"), API("API")
|
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? =
|
private fun parseVersion(collector: MessageCollector, value: String?, versionOf: String): LanguageVersion? =
|
||||||
if (value == null) null
|
if (value == null) null
|
||||||
else LanguageVersion.fromVersionString(value)
|
else LanguageVersion.fromVersionString(value)
|
||||||
|
|||||||
@@ -97,36 +97,6 @@ abstract class CLICompiler<A : CommonCompilerArguments> : CLITool<A>() {
|
|||||||
try {
|
try {
|
||||||
setIdeaIoUseFallback()
|
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)
|
val code = doExecute(arguments, configuration, rootDisposable, paths)
|
||||||
|
|
||||||
performanceManager.notifyCompilationFinished()
|
performanceManager.notifyCompilationFinished()
|
||||||
|
|||||||
-2
@@ -108,8 +108,6 @@ object FirSessionFactoryHelper {
|
|||||||
|
|
||||||
override fun <T> getFlag(flag: AnalysisFlag<T>): T = stub()
|
override fun <T> getFlag(flag: AnalysisFlag<T>): T = stub()
|
||||||
|
|
||||||
override fun copy(languageVersion: LanguageVersion): LanguageVersionSettings = this
|
|
||||||
|
|
||||||
override val apiVersion: ApiVersion
|
override val apiVersion: ApiVersion
|
||||||
get() = stub()
|
get() = stub()
|
||||||
override val languageVersion: LanguageVersion
|
override val languageVersion: LanguageVersion
|
||||||
|
|||||||
-4
@@ -39,10 +39,6 @@ data class CompilerTestLanguageVersionSettings(
|
|||||||
|
|
||||||
override fun isPreRelease(): Boolean = false
|
override fun isPreRelease(): Boolean = false
|
||||||
|
|
||||||
override fun copy(languageVersion: LanguageVersion): LanguageVersionSettings {
|
|
||||||
return CompilerTestLanguageVersionSettings(initialLanguageFeatures, apiVersion, languageVersion, analysisFlags)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
override fun <T> getFlag(flag: AnalysisFlag<T>): T = analysisFlags[flag] as T? ?: flag.defaultValue
|
override fun <T> getFlag(flag: AnalysisFlag<T>): T = analysisFlags[flag] as T? ?: flag.defaultValue
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -507,8 +507,6 @@ interface LanguageVersionSettings {
|
|||||||
// Please do not use this to enable/disable specific features/checks. Instead add a new LanguageFeature entry and call supportsFeature
|
// Please do not use this to enable/disable specific features/checks. Instead add a new LanguageFeature entry and call supportsFeature
|
||||||
val languageVersion: LanguageVersion
|
val languageVersion: LanguageVersion
|
||||||
|
|
||||||
fun copy(languageVersion: LanguageVersion): LanguageVersionSettings = this
|
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val RESOURCE_NAME_TO_ALLOW_READING_FROM_ENVIRONMENT = "META-INF/allow-configuring-from-environment"
|
const val RESOURCE_NAME_TO_ALLOW_READING_FROM_ENVIRONMENT = "META-INF/allow-configuring-from-environment"
|
||||||
}
|
}
|
||||||
@@ -557,9 +555,6 @@ class LanguageVersionSettingsImpl @JvmOverloads constructor(
|
|||||||
state == LanguageFeature.State.ENABLED && feature.forcesPreReleaseBinariesIfEnabled()
|
state == LanguageFeature.State.ENABLED && feature.forcesPreReleaseBinariesIfEnabled()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun copy(languageVersion: LanguageVersion): LanguageVersionSettings =
|
|
||||||
LanguageVersionSettingsImpl(languageVersion, apiVersion, analysisFlags, specificFeatures)
|
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
@JvmField
|
@JvmField
|
||||||
val DEFAULT = LanguageVersionSettingsImpl(LanguageVersion.LATEST_STABLE, ApiVersion.LATEST_STABLE)
|
val DEFAULT = LanguageVersionSettingsImpl(LanguageVersion.LATEST_STABLE, ApiVersion.LATEST_STABLE)
|
||||||
|
|||||||
Reference in New Issue
Block a user