diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLICompiler.java b/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLICompiler.java index 9f910379fbd..a7dc7fb00fe 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLICompiler.java +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLICompiler.java @@ -279,15 +279,10 @@ public abstract class CLICompiler { extraLanguageFeatures.put(LanguageFeature.Coroutines, coroutinesState); } - CommonConfigurationKeysKt.setLanguageVersionSettings( - configuration, - new LanguageVersionSettingsImpl( - languageVersion, - ApiVersion.createByLanguageVersion(apiVersion), - arguments.skipMetadataVersionCheck, - extraLanguageFeatures - ) - ); + LanguageVersionSettingsImpl settings = + new LanguageVersionSettingsImpl(languageVersion, ApiVersion.createByLanguageVersion(apiVersion), extraLanguageFeatures); + settings.switchFlag(AnalysisFlags.getSkipMetadataVersionCheck(), arguments.skipMetadataVersionCheck); + CommonConfigurationKeysKt.setLanguageVersionSettings(configuration, settings); } @Nullable diff --git a/compiler/daemon/src/org/jetbrains/kotlin/daemon/KotlinRemoteReplService.kt b/compiler/daemon/src/org/jetbrains/kotlin/daemon/KotlinRemoteReplService.kt index 06cc26e2b20..2d8bf6f1de2 100644 --- a/compiler/daemon/src/org/jetbrains/kotlin/daemon/KotlinRemoteReplService.kt +++ b/compiler/daemon/src/org/jetbrains/kotlin/daemon/KotlinRemoteReplService.kt @@ -53,7 +53,9 @@ open class KotlinJvmReplService( addJvmClasspathRoots(templateClasspath) put(CommonConfigurationKeys.MODULE_NAME, "kotlin-script") put(CommonConfigurationKeys.LANGUAGE_VERSION_SETTINGS, - LanguageVersionSettingsImpl(LanguageVersion.LATEST, ApiVersion.LATEST, skipMetadataVersionCheck = true)) + LanguageVersionSettingsImpl(LanguageVersion.LATEST, ApiVersion.LATEST).apply { + switchFlag(AnalysisFlags.skipMetadataVersionCheck, true) + }) } protected fun makeScriptDefinition(templateClasspath: List, templateClassName: String): KotlinScriptDefinition? { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/CompilerDeserializationConfiguration.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/CompilerDeserializationConfiguration.kt index a9f43f44da7..e19d93bce6c 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/CompilerDeserializationConfiguration.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/CompilerDeserializationConfiguration.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.resolve +import org.jetbrains.kotlin.config.AnalysisFlags import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.serialization.deserialization.DeserializationConfiguration @@ -23,5 +24,5 @@ import org.jetbrains.kotlin.serialization.deserialization.DeserializationConfigu class CompilerDeserializationConfiguration(languageVersionSettings: LanguageVersionSettings) : DeserializationConfiguration { override val typeAliasesAllowed = languageVersionSettings.supportsFeature(LanguageFeature.TypeAliases) - override val skipMetadataVersionCheck = languageVersionSettings.skipMetadataVersionCheck + override val skipMetadataVersionCheck = languageVersionSettings.isFlagEnabled(AnalysisFlags.skipMetadataVersionCheck) } diff --git a/compiler/tests-common/org/jetbrains/kotlin/checkers/BaseDiagnosticsTest.kt b/compiler/tests-common/org/jetbrains/kotlin/checkers/BaseDiagnosticsTest.kt index d28f526b61a..4d36a96743f 100644 --- a/compiler/tests-common/org/jetbrains/kotlin/checkers/BaseDiagnosticsTest.kt +++ b/compiler/tests-common/org/jetbrains/kotlin/checkers/BaseDiagnosticsTest.kt @@ -108,7 +108,7 @@ abstract class BaseDiagnosticsTest : KotlinMultiFileTestWithJava) = + object : ReadOnlyProperty { + private val flag = AnalysisFlag(property.name) + + override fun getValue(thisRef: Any?, property: KProperty<*>): AnalysisFlag = flag + } + +object AnalysisFlags { + @JvmStatic + val skipMetadataVersionCheck by AnalysisFlag +} diff --git a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt index 767f25e0fc5..37e8d6efd6f 100644 --- a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt +++ b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt @@ -106,20 +106,32 @@ interface LanguageVersionSettings { fun supportsFeature(feature: LanguageFeature): Boolean = getFeatureSupport(feature).let { it == LanguageFeature.State.ENABLED || it == LanguageFeature.State.ENABLED_WITH_WARNING } + fun isFlagEnabled(flag: AnalysisFlag): Boolean + val apiVersion: ApiVersion // Please do not use this to enable/disable specific features/checks. Instead add a new LanguageFeature entry and call supportsFeature val languageVersion: LanguageVersion - - val skipMetadataVersionCheck: Boolean } class LanguageVersionSettingsImpl @JvmOverloads constructor( override val languageVersion: LanguageVersion, override val apiVersion: ApiVersion, - override val skipMetadataVersionCheck: Boolean = false, private val specificFeatures: Map = emptyMap() ) : LanguageVersionSettings { + private val enabledFlags = hashSetOf() + + override fun isFlagEnabled(flag: AnalysisFlag): Boolean = flag in enabledFlags + + fun switchFlag(flag: AnalysisFlag, enable: Boolean) { + if (enable) { + enabledFlags.add(flag) + } + else { + enabledFlags.remove(flag) + } + } + override fun getFeatureSupport(feature: LanguageFeature): LanguageFeature.State { specificFeatures[feature]?.let { return it } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/Platform.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/Platform.kt index f60206bdb08..d10b069b2c2 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/Platform.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/project/Platform.kt @@ -90,12 +90,9 @@ fun Project.getLanguageVersionSettings(contextModule: Module? = null): LanguageV compilerSettings, null ) - return LanguageVersionSettingsImpl( - languageVersion, - apiVersion, - arguments.skipMetadataVersionCheck, - extraLanguageFeatures - ) + return LanguageVersionSettingsImpl(languageVersion, apiVersion, extraLanguageFeatures).apply { + switchFlag(AnalysisFlags.skipMetadataVersionCheck, arguments.skipMetadataVersionCheck) + } } val Module.languageVersionSettings: LanguageVersionSettings @@ -112,12 +109,9 @@ val Module.languageVersionSettings: LanguageVersionSettings this ) - return LanguageVersionSettingsImpl( - languageVersion, - ApiVersion.createByLanguageVersion(apiVersion), - facetSettings.skipMetadataVersionCheck, - extraLanguageFeatures - ) + return LanguageVersionSettingsImpl(languageVersion, ApiVersion.createByLanguageVersion(apiVersion), extraLanguageFeatures).apply { + switchFlag(AnalysisFlags.skipMetadataVersionCheck, facetSettings.skipMetadataVersionCheck) + } } val Module.targetPlatform: TargetPlatformKind<*>?