From 2f99f6ad340174f10c5a0ed02b257168ca7db4c3 Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Mon, 24 Jul 2017 20:49:00 +0300 Subject: [PATCH] Refactor AnalysisFlags and their support in IDE * Support flags with any value (not just Boolean) * Support all flags by parsing arguments in KotlinFacetSettings, instead of manually listing known flags #KT-19210 Fixed --- .../arguments/CommonCompilerArguments.java | 15 ++++++++ .../arguments/K2JVMCompilerArguments.java | 13 +++++++ .../kotlin/cli/common/CLICompiler.java | 15 ++++---- .../jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt | 4 --- .../kotlin/daemon/KotlinRemoteReplService.kt | 6 ++-- .../kotlin/frontend/java/di/injection.kt | 4 +-- .../CompilerDeserializationConfiguration.kt | 4 +-- .../checkers/HeaderImplDeclarationChecker.kt | 4 +-- .../kotlin/checkers/BaseDiagnosticsTest.kt | 2 +- .../AbstractForeignAnnotationsTest.kt | 8 ++--- .../LoadJavaPackageAnnotationsTest.kt | 6 ++-- .../TypeQualifierAnnotationResolverTest.kt | 6 ++-- .../{AnalysisFlags.kt => AnalysisFlag.kt} | 34 +++++++++++-------- .../kotlin/config/LanguageVersionSettings.kt | 21 +++++------- .../jetbrains/kotlin/idea/project/Platform.kt | 20 +++++++---- .../kotlin/config/KotlinFacetSettings.kt | 6 ---- .../jetbrains/kotlin/js/config/JsConfig.java | 5 ++- .../KotlinJsr223JvmLocalScriptEngine.kt | 6 ++-- 18 files changed, 99 insertions(+), 80 deletions(-) rename compiler/util/src/org/jetbrains/kotlin/config/{AnalysisFlags.kt => AnalysisFlag.kt} (53%) diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/CommonCompilerArguments.java b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/CommonCompilerArguments.java index 7ec4c000bcf..09bab15f99f 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/CommonCompilerArguments.java +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/CommonCompilerArguments.java @@ -16,6 +16,13 @@ package org.jetbrains.kotlin.cli.common.arguments; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.kotlin.config.AnalysisFlag; + +import java.util.HashMap; +import java.util.Map; + +@SuppressWarnings("WeakerAccess") public abstract class CommonCompilerArguments extends CommonToolArguments { public static final long serialVersionUID = 0L; @@ -89,6 +96,14 @@ public abstract class CommonCompilerArguments extends CommonToolArguments { public static final String ERROR = "error"; public static final String ENABLE = "enable"; + @NotNull + public Map, Object> configureAnalysisFlags() { + Map, Object> result = new HashMap<>(); + result.put(AnalysisFlag.getSkipMetadataVersionCheck(), skipMetadataVersionCheck); + result.put(AnalysisFlag.getMultiPlatformDoNotCheckImpl(), noCheckImpl); + return result; + } + // Used only for serialize and deserialize settings. Don't use in other places! public static final class DummyImpl extends CommonCompilerArguments {} } diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.java b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.java index d249739fc40..502b70f99b9 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.java +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.java @@ -16,8 +16,13 @@ package org.jetbrains.kotlin.cli.common.arguments; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.kotlin.config.AnalysisFlag; import org.jetbrains.kotlin.config.JvmTarget; +import java.util.Map; + +@SuppressWarnings("WeakerAccess") public class K2JVMCompilerArguments extends CommonCompilerArguments { public static final long serialVersionUID = 0L; @@ -162,4 +167,12 @@ public class K2JVMCompilerArguments extends CommonCompilerArguments { // Paths to output directories for friend modules. public String[] friendPaths; + + @Override + @NotNull + public Map, Object> configureAnalysisFlags() { + Map, Object> result = super.configureAnalysisFlags(); + result.put(AnalysisFlag.getLoadJsr305Annotations(), loadJsr305annotations); + return result; + } } 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 13daead0589..07b1b2cd920 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLICompiler.java +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLICompiler.java @@ -189,15 +189,12 @@ public abstract class CLICompiler extends CLI extraLanguageFeatures.put(LanguageFeature.Coroutines, coroutinesState); } - LanguageVersionSettingsImpl settings = - new LanguageVersionSettingsImpl(languageVersion, ApiVersion.createByLanguageVersion(apiVersion), extraLanguageFeatures); - settings.switchFlag(AnalysisFlags.getSkipMetadataVersionCheck(), arguments.skipMetadataVersionCheck); - settings.switchFlag(AnalysisFlags.getMultiPlatformDoNotCheckImpl(), arguments.noCheckImpl); - configureAnalysisFlags(settings, arguments); - CommonConfigurationKeysKt.setLanguageVersionSettings(configuration, settings); - } - - protected void configureAnalysisFlags(@NotNull LanguageVersionSettingsImpl settings, @NotNull A arguments) { + CommonConfigurationKeysKt.setLanguageVersionSettings(configuration, new LanguageVersionSettingsImpl( + languageVersion, + ApiVersion.createByLanguageVersion(apiVersion), + arguments.configureAnalysisFlags(), + extraLanguageFeatures + )); } @Nullable diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt index 47fda1e273a..ffa3e1775d3 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt @@ -303,10 +303,6 @@ class K2JVMCompiler : CLICompiler() { } } - override fun configureAnalysisFlags(settings: LanguageVersionSettingsImpl, arguments: K2JVMCompilerArguments) { - settings.switchFlag(AnalysisFlags.loadJsr305Annotations, arguments.loadJsr305annotations) - } - override fun createArguments(): K2JVMCompilerArguments = K2JVMCompilerArguments().apply { if (System.getenv("KOTLIN_REPORT_PERF") != null) { reportPerf = true diff --git a/compiler/daemon/src/org/jetbrains/kotlin/daemon/KotlinRemoteReplService.kt b/compiler/daemon/src/org/jetbrains/kotlin/daemon/KotlinRemoteReplService.kt index f3d9b644819..e7a8c827a72 100644 --- a/compiler/daemon/src/org/jetbrains/kotlin/daemon/KotlinRemoteReplService.kt +++ b/compiler/daemon/src/org/jetbrains/kotlin/daemon/KotlinRemoteReplService.kt @@ -54,9 +54,9 @@ open class KotlinJvmReplService( addJvmClasspathRoots(PathUtil.getKotlinPathsForCompiler().let { listOf(it.stdlibPath, it.reflectPath, it.scriptRuntimePath) }) addJvmClasspathRoots(templateClasspath) put(CommonConfigurationKeys.MODULE_NAME, "kotlin-script") - languageVersionSettings = LanguageVersionSettingsImpl(LanguageVersion.LATEST_STABLE, ApiVersion.LATEST_STABLE).apply { - switchFlag(AnalysisFlags.skipMetadataVersionCheck, true) - } + languageVersionSettings = LanguageVersionSettingsImpl( + LanguageVersion.LATEST_STABLE, ApiVersion.LATEST_STABLE, mapOf(AnalysisFlag.skipMetadataVersionCheck to true) + ) } protected fun makeScriptDefinition(templateClasspath: List, templateClassName: String): KotlinScriptDefinition? { diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt index be6bf00bbd2..a051baab601 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/frontend/java/di/injection.kt @@ -19,7 +19,7 @@ package org.jetbrains.kotlin.frontend.java.di import com.intellij.openapi.project.Project import com.intellij.psi.search.GlobalSearchScope import org.jetbrains.kotlin.builtins.JvmBuiltInsPackageFragmentProvider -import org.jetbrains.kotlin.config.AnalysisFlags +import org.jetbrains.kotlin.config.AnalysisFlag import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageVersionSettings @@ -103,7 +103,7 @@ fun createContainerForLazyResolveWithJava( useInstance(languageVersionSettings) - if (languageVersionSettings.isFlagEnabled(AnalysisFlags.loadJsr305Annotations)) { + if (languageVersionSettings.getFlag(AnalysisFlag.loadJsr305Annotations)) { useImpl() } else { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/CompilerDeserializationConfiguration.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/CompilerDeserializationConfiguration.kt index e19d93bce6c..83302bfd6e3 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/CompilerDeserializationConfiguration.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/CompilerDeserializationConfiguration.kt @@ -16,7 +16,7 @@ package org.jetbrains.kotlin.resolve -import org.jetbrains.kotlin.config.AnalysisFlags +import org.jetbrains.kotlin.config.AnalysisFlag import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.serialization.deserialization.DeserializationConfiguration @@ -24,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.isFlagEnabled(AnalysisFlags.skipMetadataVersionCheck) + override val skipMetadataVersionCheck = languageVersionSettings.getFlag(AnalysisFlag.skipMetadataVersionCheck) } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/HeaderImplDeclarationChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/HeaderImplDeclarationChecker.kt index d887eaf147f..09049239666 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/HeaderImplDeclarationChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/HeaderImplDeclarationChecker.kt @@ -17,7 +17,7 @@ package org.jetbrains.kotlin.resolve.checkers import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import org.jetbrains.kotlin.config.AnalysisFlags +import org.jetbrains.kotlin.config.AnalysisFlag import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.config.LanguageVersionSettings import org.jetbrains.kotlin.descriptors.* @@ -61,7 +61,7 @@ object HeaderImplDeclarationChecker : DeclarationChecker { if (descriptor !is MemberDescriptor) return - val checkImpl = !languageVersionSettings.isFlagEnabled(AnalysisFlags.multiPlatformDoNotCheckImpl) + val checkImpl = !languageVersionSettings.getFlag(AnalysisFlag.multiPlatformDoNotCheckImpl) if (descriptor.isHeader && declaration.hasModifier(KtTokens.HEADER_KEYWORD)) { checkHeaderDeclarationHasImplementation(declaration, descriptor, diagnosticHolder, descriptor.module, checkImpl) } diff --git a/compiler/tests-common/org/jetbrains/kotlin/checkers/BaseDiagnosticsTest.kt b/compiler/tests-common/org/jetbrains/kotlin/checkers/BaseDiagnosticsTest.kt index c1a059d2ff5..fc9c4f9accd 100644 --- a/compiler/tests-common/org/jetbrains/kotlin/checkers/BaseDiagnosticsTest.kt +++ b/compiler/tests-common/org/jetbrains/kotlin/checkers/BaseDiagnosticsTest.kt @@ -121,7 +121,7 @@ abstract class BaseDiagnosticsTest : KotlinMultiFileTestWithJava getFlag(flag: AnalysisFlag): T = flag.defaultValue } inner class TestFile( diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/AbstractForeignAnnotationsTest.kt b/compiler/tests/org/jetbrains/kotlin/checkers/AbstractForeignAnnotationsTest.kt index c6abbbb5b67..4d4ad6ce020 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/AbstractForeignAnnotationsTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/checkers/AbstractForeignAnnotationsTest.kt @@ -29,9 +29,7 @@ abstract class AbstractForeignAnnotationsTest : AbstractDiagnosticsWithFullJdkTe open protected val annotationsPath: String get() = FOREIGN_ANNOTATIONS_SOURCES_PATH - override fun loadLanguageVersionSettings(module: List): LanguageVersionSettings { - return LanguageVersionSettingsImpl(LanguageVersion.LATEST_STABLE, ApiVersion.LATEST_STABLE).apply { - switchFlag(AnalysisFlags.loadJsr305Annotations, true) - } - } + override fun loadLanguageVersionSettings(module: List): LanguageVersionSettings = + LanguageVersionSettingsImpl(LanguageVersion.LATEST_STABLE, ApiVersion.LATEST_STABLE, + mapOf(AnalysisFlag.loadJsr305Annotations to true)) } diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/LoadJavaPackageAnnotationsTest.kt b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/LoadJavaPackageAnnotationsTest.kt index 53086a5836b..6e8de73c6fd 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/LoadJavaPackageAnnotationsTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/LoadJavaPackageAnnotationsTest.kt @@ -45,9 +45,9 @@ class LoadJavaPackageAnnotationsTest : KtUsefulTestCase() { if (useJavac) { put(JVMConfigurationKeys.USE_JAVAC, true) } - languageVersionSettings = LanguageVersionSettingsImpl(LanguageVersion.LATEST_STABLE, ApiVersion.LATEST_STABLE).apply { - switchFlag(AnalysisFlags.loadJsr305Annotations, true) - } + languageVersionSettings = LanguageVersionSettingsImpl( + LanguageVersion.LATEST_STABLE, ApiVersion.LATEST_STABLE, mapOf(AnalysisFlag.loadJsr305Annotations to true) + ) configurator(this) } val environment = diff --git a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/TypeQualifierAnnotationResolverTest.kt b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/TypeQualifierAnnotationResolverTest.kt index ed5cb932d77..6264245d3be 100644 --- a/compiler/tests/org/jetbrains/kotlin/jvm/compiler/TypeQualifierAnnotationResolverTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/jvm/compiler/TypeQualifierAnnotationResolverTest.kt @@ -94,9 +94,9 @@ class TypeQualifierAnnotationResolverTest : KtUsefulTestCase() { ), listOf(File(TEST_DATA_PATH)) ).apply { - languageVersionSettings = LanguageVersionSettingsImpl(LanguageVersion.LATEST_STABLE, ApiVersion.LATEST_STABLE).apply { - switchFlag(AnalysisFlags.loadJsr305Annotations, true) - } + languageVersionSettings = LanguageVersionSettingsImpl( + LanguageVersion.LATEST_STABLE, ApiVersion.LATEST_STABLE, mapOf(AnalysisFlag.loadJsr305Annotations to true) + ) } val environment = KotlinCoreEnvironment.createForTests(myTestRootDisposable, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES) diff --git a/compiler/util/src/org/jetbrains/kotlin/config/AnalysisFlags.kt b/compiler/util/src/org/jetbrains/kotlin/config/AnalysisFlag.kt similarity index 53% rename from compiler/util/src/org/jetbrains/kotlin/config/AnalysisFlags.kt rename to compiler/util/src/org/jetbrains/kotlin/config/AnalysisFlag.kt index 70188d0de91..b5e618bd586 100644 --- a/compiler/util/src/org/jetbrains/kotlin/config/AnalysisFlags.kt +++ b/compiler/util/src/org/jetbrains/kotlin/config/AnalysisFlag.kt @@ -19,30 +19,34 @@ package org.jetbrains.kotlin.config import kotlin.properties.ReadOnlyProperty import kotlin.reflect.KProperty -class AnalysisFlag internal constructor(private val name: String) { - override fun equals(other: Any?): Boolean = other is AnalysisFlag && other.name == name +class AnalysisFlag internal constructor( + private val name: String, + val defaultValue: T +) { + override fun equals(other: Any?): Boolean = other is AnalysisFlag<*> && other.name == name override fun hashCode(): Int = name.hashCode() override fun toString(): String = name - companion object -} + private class Flag(name: String, defaultValue: T) : ReadOnlyProperty> { + private val flag = AnalysisFlag(name, defaultValue) -private operator fun @Suppress("unused") AnalysisFlag.Companion.provideDelegate(instance: Any?, property: KProperty<*>) = - object : ReadOnlyProperty { - private val flag = AnalysisFlag(property.name) + override fun getValue(thisRef: Any?, property: KProperty<*>): AnalysisFlag = flag - override fun getValue(thisRef: Any?, property: KProperty<*>): AnalysisFlag = flag + object Boolean { + operator fun provideDelegate(instance: Any?, property: KProperty<*>) = Flag(property.name, false) } + } -object AnalysisFlags { - @JvmStatic - val skipMetadataVersionCheck by AnalysisFlag + companion object Flags { + @JvmStatic + val skipMetadataVersionCheck by Flag.Boolean - @JvmStatic - val multiPlatformDoNotCheckImpl by AnalysisFlag + @JvmStatic + val multiPlatformDoNotCheckImpl by Flag.Boolean - @JvmStatic - val loadJsr305Annotations by AnalysisFlag + @JvmStatic + val loadJsr305Annotations by Flag.Boolean + } } diff --git a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt index d1226aeafeb..6d72eb479fa 100644 --- a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt +++ b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt @@ -19,6 +19,7 @@ package org.jetbrains.kotlin.config import org.jetbrains.kotlin.config.LanguageVersion.KOTLIN_1_1 import org.jetbrains.kotlin.config.LanguageVersion.KOTLIN_1_2 import org.jetbrains.kotlin.utils.DescriptionAware +import java.util.* enum class LanguageFeature( val sinceVersion: LanguageVersion?, @@ -115,7 +116,7 @@ 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 + fun getFlag(flag: AnalysisFlag): T val apiVersion: ApiVersion @@ -126,20 +127,14 @@ interface LanguageVersionSettings { class LanguageVersionSettingsImpl @JvmOverloads constructor( override val languageVersion: LanguageVersion, override val apiVersion: ApiVersion, - private val specificFeatures: Map = emptyMap() + analysisFlags: Map, Any?> = emptyMap(), + specificFeatures: Map = emptyMap() ) : LanguageVersionSettings { - private val enabledFlags = hashSetOf() + private val analysisFlags: Map, *> = Collections.unmodifiableMap(analysisFlags) + private val specificFeatures: Map = Collections.unmodifiableMap(specificFeatures) - override fun isFlagEnabled(flag: AnalysisFlag): Boolean = flag in enabledFlags - - fun switchFlag(flag: AnalysisFlag, enable: Boolean) { - if (enable) { - enabledFlags.add(flag) - } - else { - enabledFlags.remove(flag) - } - } + @Suppress("UNCHECKED_CAST") + override fun getFlag(flag: AnalysisFlag): T = analysisFlags[flag] as T? ?: flag.defaultValue 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 c6a9b92a14e..1d039c4752d 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 @@ -25,7 +25,7 @@ import com.intellij.openapi.roots.ProjectFileIndex import org.jetbrains.kotlin.builtins.KotlinBuiltIns import org.jetbrains.kotlin.cli.common.arguments.Argument import org.jetbrains.kotlin.cli.common.arguments.CommonCompilerArguments -import org.jetbrains.kotlin.cli.common.arguments.K2JVMCompilerArguments +import org.jetbrains.kotlin.cli.common.arguments.parseCommandLineArguments import org.jetbrains.kotlin.config.* import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade import org.jetbrains.kotlin.idea.compiler.configuration.Kotlin2JvmCompilerArgumentsHolder @@ -88,9 +88,7 @@ fun Project.getLanguageVersionSettings(contextModule: Module? = null): LanguageV compilerSettings, null ) - return LanguageVersionSettingsImpl(languageVersion, apiVersion, extraLanguageFeatures).apply { - switchFlag(AnalysisFlags.skipMetadataVersionCheck, arguments.skipMetadataVersionCheck) - } + return LanguageVersionSettingsImpl(languageVersion, apiVersion, arguments.configureAnalysisFlags(), extraLanguageFeatures) } val Module.languageVersionSettings: LanguageVersionSettings @@ -109,9 +107,19 @@ val Module.languageVersionSettings: LanguageVersionSettings this ) - return LanguageVersionSettingsImpl(languageVersion, ApiVersion.createByLanguageVersion(apiVersion), extraLanguageFeatures).apply { - switchFlag(AnalysisFlags.skipMetadataVersionCheck, facetSettings.skipMetadataVersionCheck) + val arguments = facetSettings.compilerArguments + if (arguments != null) { + facetSettings.compilerSettings?.let { compilerSettings -> + parseCommandLineArguments(compilerSettings.additionalArgumentsAsList, arguments) + } } + + return LanguageVersionSettingsImpl( + languageVersion, + ApiVersion.createByLanguageVersion(apiVersion), + arguments?.configureAnalysisFlags().orEmpty(), + extraLanguageFeatures + ) } val Module.targetPlatform: TargetPlatformKind<*>? diff --git a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt index bf7d9b2e036..0cb3d2ef86e 100644 --- a/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt +++ b/idea/idea-jps-common/src/org/jetbrains/kotlin/config/KotlinFacetSettings.kt @@ -124,12 +124,6 @@ class KotlinFacetSettings { LanguageFeature.State.ENABLED_WITH_ERROR, LanguageFeature.State.DISABLED -> CommonCompilerArguments.ERROR } } - - var skipMetadataVersionCheck: Boolean - get() = compilerArguments?.skipMetadataVersionCheck == true - set(value) { - compilerArguments!!.skipMetadataVersionCheck = value - } } fun TargetPlatformKind<*>.createCompilerArguments(init: CommonCompilerArguments.() -> Unit = {}): CommonCompilerArguments { diff --git a/js/js.frontend/src/org/jetbrains/kotlin/js/config/JsConfig.java b/js/js.frontend/src/org/jetbrains/kotlin/js/config/JsConfig.java index 595246a5bbe..558a524712e 100644 --- a/js/js.frontend/src/org/jetbrains/kotlin/js/config/JsConfig.java +++ b/js/js.frontend/src/org/jetbrains/kotlin/js/config/JsConfig.java @@ -163,8 +163,7 @@ public class JsConfig { Set modules = new HashSet<>(); - boolean skipMetadataVersionCheck = - getLanguageVersionSettings(configuration).isFlagEnabled(AnalysisFlags.getSkipMetadataVersionCheck()); + boolean skipMetadataVersionCheck = getLanguageVersionSettings(configuration).getFlag(AnalysisFlag.getSkipMetadataVersionCheck()); for (String path : libraries) { if (librariesToSkip != null && librariesToSkip.contains(path)) continue; @@ -312,7 +311,7 @@ public class JsConfig { return factoryMap.computeIfAbsent(metadata, m -> { LanguageVersionSettings languageVersionSettings = CommonConfigurationKeysKt.getLanguageVersionSettings(configuration); assert m.getVersion().isCompatible() || - languageVersionSettings.isFlagEnabled(AnalysisFlags.getSkipMetadataVersionCheck()) : + languageVersionSettings.getFlag(AnalysisFlag.getSkipMetadataVersionCheck()) : "Expected JS metadata version " + JsMetadataVersion.INSTANCE + ", but actual metadata version is " + m.getVersion(); ModuleDescriptorImpl moduleDescriptor = new ModuleDescriptorImpl( diff --git a/libraries/tools/kotlin-script-util/src/main/kotlin/org/jetbrains/kotlin/script/jsr223/KotlinJsr223JvmLocalScriptEngine.kt b/libraries/tools/kotlin-script-util/src/main/kotlin/org/jetbrains/kotlin/script/jsr223/KotlinJsr223JvmLocalScriptEngine.kt index e4816a5e8aa..54a843d597a 100644 --- a/libraries/tools/kotlin-script-util/src/main/kotlin/org/jetbrains/kotlin/script/jsr223/KotlinJsr223JvmLocalScriptEngine.kt +++ b/libraries/tools/kotlin-script-util/src/main/kotlin/org/jetbrains/kotlin/script/jsr223/KotlinJsr223JvmLocalScriptEngine.kt @@ -71,8 +71,8 @@ class KotlinJsr223JvmLocalScriptEngine( addJvmClasspathRoots(PathUtil.getJdkClassesRootsFromCurrentJre()) addJvmClasspathRoots(templateClasspath) put(CommonConfigurationKeys.MODULE_NAME, "kotlin-script") - languageVersionSettings = LanguageVersionSettingsImpl(LanguageVersion.LATEST_STABLE, ApiVersion.LATEST_STABLE).apply { - switchFlag(AnalysisFlags.skipMetadataVersionCheck, true) - } + languageVersionSettings = LanguageVersionSettingsImpl( + LanguageVersion.LATEST_STABLE, ApiVersion.LATEST_STABLE, mapOf(AnalysisFlag.skipMetadataVersionCheck to true) + ) } }