diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassCodegen.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassCodegen.kt index d8535d8ed7c..81fecc593a2 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassCodegen.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/MultifileClassCodegen.kt @@ -25,6 +25,7 @@ import org.jetbrains.kotlin.codegen.context.FieldOwnerContext import org.jetbrains.kotlin.codegen.context.MethodContext import org.jetbrains.kotlin.codegen.state.GenerationState import org.jetbrains.kotlin.config.IncrementalCompilation +import org.jetbrains.kotlin.config.JvmAnalysisFlags import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.diagnostics.DiagnosticUtils import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil @@ -80,7 +81,7 @@ class MultifileClassCodegenImpl( .filterIsInstance() private val shouldGeneratePartHierarchy = - state.inheritMultifileParts + state.languageVersionSettings.getFlag(JvmAnalysisFlags.inheritMultifileParts) private val partInternalNamesSorted = run { val partInternalNamesSet = hashSetOf() diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt index f696c6e22f1..8d11767ff2f 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/state/GenerationState.kt @@ -227,7 +227,6 @@ class GenerationState private constructor( val assertionsMode: JVMAssertionsMode = configuration.get(JVMConfigurationKeys.ASSERTIONS_MODE, JVMAssertionsMode.DEFAULT) val isInlineDisabled: Boolean = configuration.getBoolean(CommonConfigurationKeys.DISABLE_INLINE) val useTypeTableInSerializer: Boolean = configuration.getBoolean(JVMConfigurationKeys.USE_TYPE_TABLE) - val inheritMultifileParts: Boolean = configuration.getBoolean(JVMConfigurationKeys.INHERIT_MULTIFILE_PARTS) val rootContext: CodegenContext<*> = RootContext(this) diff --git a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.kt b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.kt index cccac38c98b..2613eeb36eb 100644 --- a/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.kt +++ b/compiler/cli/cli-common/src/org/jetbrains/kotlin/cli/common/arguments/K2JVMCompilerArguments.kt @@ -268,11 +268,12 @@ class K2JVMCompilerArguments : CommonCompilerArguments() { ) result[AnalysisFlags.ignoreDataFlowInAssert] = JVMAssertionsMode.fromString(assertionsMode) != JVMAssertionsMode.LEGACY JvmDefaultMode.fromStringOrNull(jvmDefault)?.let { result[JvmAnalysisFlags.jvmDefaultMode] = it } - ?: collector.report( - CompilerMessageSeverity.ERROR, - "Unknown @JvmDefault mode: $jvmDefault, " + - "supported modes: ${JvmDefaultMode.values().map { it.description }}" - ) + ?: collector.report( + CompilerMessageSeverity.ERROR, + "Unknown @JvmDefault mode: $jvmDefault, " + + "supported modes: ${JvmDefaultMode.values().map { it.description }}" + ) + result[JvmAnalysisFlags.inheritMultifileParts] = inheritMultifileParts return result } 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 14422e9788c..796434c0863 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/jvm/K2JVMCompiler.kt @@ -390,7 +390,6 @@ class K2JVMCompiler : CLICompiler() { assertionsMode ?: JVMAssertionsMode.DEFAULT ) - configuration.put(JVMConfigurationKeys.INHERIT_MULTIFILE_PARTS, arguments.inheritMultifileParts) configuration.put(JVMConfigurationKeys.USE_TYPE_TABLE, arguments.useTypeTable) configuration.put(JVMConfigurationKeys.SKIP_RUNTIME_VERSION_CHECK, arguments.skipRuntimeVersionCheck) configuration.put(JVMConfigurationKeys.USE_FAST_CLASS_FILES_READING, !arguments.useOldClassFilesReading) diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/config/JVMConfigurationKeys.java b/compiler/frontend.java/src/org/jetbrains/kotlin/config/JVMConfigurationKeys.java index 659b7a08429..66a616503b6 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/config/JVMConfigurationKeys.java +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/config/JVMConfigurationKeys.java @@ -69,8 +69,6 @@ public class JVMConfigurationKeys { CompilerConfigurationKey.create("do not throw NPE on explicit 'equals' call for null receiver of platform boxed primitive type"); public static final CompilerConfigurationKey DISABLE_OPTIMIZATION = CompilerConfigurationKey.create("disable optimization"); - public static final CompilerConfigurationKey INHERIT_MULTIFILE_PARTS = - CompilerConfigurationKey.create("compile multifile classes to a hierarchy of parts and facade"); public static final CompilerConfigurationKey USE_TYPE_TABLE = CompilerConfigurationKey.create("use type table in serializer"); diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/config/JvmAnalysisFlags.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/config/JvmAnalysisFlags.kt index 522fc801638..bb6021738bf 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/config/JvmAnalysisFlags.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/config/JvmAnalysisFlags.kt @@ -14,4 +14,7 @@ object JvmAnalysisFlags { @JvmStatic val jvmDefaultMode by AnalysisFlag.Delegates.JvmDefaultModeDisabledByDefault + + @JvmStatic + val inheritMultifileParts by AnalysisFlag.Delegates.Boolean } diff --git a/compiler/testData/codegen/box/multifileClasses/optimized/callableRefToFun.kt b/compiler/testData/codegen/box/multifileClasses/optimized/callableRefToFun.kt index 592c6485331..b79cfd2061d 100644 --- a/compiler/testData/codegen/box/multifileClasses/optimized/callableRefToFun.kt +++ b/compiler/testData/codegen/box/multifileClasses/optimized/callableRefToFun.kt @@ -2,7 +2,7 @@ // TARGET_BACKEND: JVM // IGNORE_LIGHT_ANALYSIS // WITH_RUNTIME -// KOTLIN_CONFIGURATION_FLAGS: +JVM.INHERIT_MULTIFILE_PARTS +// !INHERIT_MULTIFILE_PARTS // FILE: box.kt import a.* diff --git a/compiler/testData/codegen/box/multifileClasses/optimized/callableRefToInternalValInline.kt b/compiler/testData/codegen/box/multifileClasses/optimized/callableRefToInternalValInline.kt index 85170091fe0..d60dc6c3dba 100644 --- a/compiler/testData/codegen/box/multifileClasses/optimized/callableRefToInternalValInline.kt +++ b/compiler/testData/codegen/box/multifileClasses/optimized/callableRefToInternalValInline.kt @@ -2,7 +2,7 @@ // TARGET_BACKEND: JVM // IGNORE_LIGHT_ANALYSIS // WITH_RUNTIME -// KOTLIN_CONFIGURATION_FLAGS: +JVM.INHERIT_MULTIFILE_PARTS +// !INHERIT_MULTIFILE_PARTS // FILE: box.kt import a.* diff --git a/compiler/testData/codegen/box/multifileClasses/optimized/callableRefToPrivateVal.kt b/compiler/testData/codegen/box/multifileClasses/optimized/callableRefToPrivateVal.kt index a053dbf65c1..4c317cb3920 100644 --- a/compiler/testData/codegen/box/multifileClasses/optimized/callableRefToPrivateVal.kt +++ b/compiler/testData/codegen/box/multifileClasses/optimized/callableRefToPrivateVal.kt @@ -2,7 +2,7 @@ // TARGET_BACKEND: JVM // IGNORE_LIGHT_ANALYSIS // WITH_RUNTIME -// KOTLIN_CONFIGURATION_FLAGS: +JVM.INHERIT_MULTIFILE_PARTS +// !INHERIT_MULTIFILE_PARTS // FILE: box.kt import a.* diff --git a/compiler/testData/codegen/box/multifileClasses/optimized/callableRefToVal.kt b/compiler/testData/codegen/box/multifileClasses/optimized/callableRefToVal.kt index 638ddbf2ccd..9db0284e2e8 100644 --- a/compiler/testData/codegen/box/multifileClasses/optimized/callableRefToVal.kt +++ b/compiler/testData/codegen/box/multifileClasses/optimized/callableRefToVal.kt @@ -2,7 +2,7 @@ // TARGET_BACKEND: JVM // IGNORE_LIGHT_ANALYSIS // WITH_RUNTIME -// KOTLIN_CONFIGURATION_FLAGS: +JVM.INHERIT_MULTIFILE_PARTS +// !INHERIT_MULTIFILE_PARTS // FILE: box.kt import a.* diff --git a/compiler/testData/codegen/box/multifileClasses/optimized/calls.kt b/compiler/testData/codegen/box/multifileClasses/optimized/calls.kt index a9fc9fd59f0..97cbe8b3144 100644 --- a/compiler/testData/codegen/box/multifileClasses/optimized/calls.kt +++ b/compiler/testData/codegen/box/multifileClasses/optimized/calls.kt @@ -2,7 +2,7 @@ // TARGET_BACKEND: JVM // IGNORE_LIGHT_ANALYSIS // WITH_RUNTIME -// KOTLIN_CONFIGURATION_FLAGS: +JVM.INHERIT_MULTIFILE_PARTS +// !INHERIT_MULTIFILE_PARTS // FILE: Baz.java public class Baz { diff --git a/compiler/testData/codegen/box/multifileClasses/optimized/deferredStaticInitialization.kt b/compiler/testData/codegen/box/multifileClasses/optimized/deferredStaticInitialization.kt index c508769a13a..edf59bbe8d3 100644 --- a/compiler/testData/codegen/box/multifileClasses/optimized/deferredStaticInitialization.kt +++ b/compiler/testData/codegen/box/multifileClasses/optimized/deferredStaticInitialization.kt @@ -2,7 +2,7 @@ // TARGET_BACKEND: JVM // IGNORE_LIGHT_ANALYSIS // WITH_RUNTIME -// KOTLIN_CONFIGURATION_FLAGS: +JVM.INHERIT_MULTIFILE_PARTS +// !INHERIT_MULTIFILE_PARTS // FILE: box.kt import a.* diff --git a/compiler/testData/codegen/box/multifileClasses/optimized/delegatedVal.kt b/compiler/testData/codegen/box/multifileClasses/optimized/delegatedVal.kt index 4fe91d05b7b..7d081020bc0 100644 --- a/compiler/testData/codegen/box/multifileClasses/optimized/delegatedVal.kt +++ b/compiler/testData/codegen/box/multifileClasses/optimized/delegatedVal.kt @@ -2,7 +2,7 @@ // TARGET_BACKEND: JVM // IGNORE_LIGHT_ANALYSIS // WITH_RUNTIME -// KOTLIN_CONFIGURATION_FLAGS: +JVM.INHERIT_MULTIFILE_PARTS +// !INHERIT_MULTIFILE_PARTS // FILE: box.kt import a.* diff --git a/compiler/testData/codegen/box/multifileClasses/optimized/initializePrivateVal.kt b/compiler/testData/codegen/box/multifileClasses/optimized/initializePrivateVal.kt index 930d0c98218..7cea78b8a09 100644 --- a/compiler/testData/codegen/box/multifileClasses/optimized/initializePrivateVal.kt +++ b/compiler/testData/codegen/box/multifileClasses/optimized/initializePrivateVal.kt @@ -2,7 +2,7 @@ // TARGET_BACKEND: JVM // IGNORE_LIGHT_ANALYSIS // WITH_RUNTIME -// KOTLIN_CONFIGURATION_FLAGS: +JVM.INHERIT_MULTIFILE_PARTS +// !INHERIT_MULTIFILE_PARTS // FILE: box.kt import a.* diff --git a/compiler/testData/codegen/box/multifileClasses/optimized/initializePublicVal.kt b/compiler/testData/codegen/box/multifileClasses/optimized/initializePublicVal.kt index d8a57e1304b..b644f5c4170 100644 --- a/compiler/testData/codegen/box/multifileClasses/optimized/initializePublicVal.kt +++ b/compiler/testData/codegen/box/multifileClasses/optimized/initializePublicVal.kt @@ -2,7 +2,7 @@ // TARGET_BACKEND: JVM // IGNORE_LIGHT_ANALYSIS // WITH_RUNTIME -// KOTLIN_CONFIGURATION_FLAGS: +JVM.INHERIT_MULTIFILE_PARTS +// !INHERIT_MULTIFILE_PARTS // FILE: box.kt import a.* diff --git a/compiler/testData/codegen/box/multifileClasses/optimized/overlappingFuns.kt b/compiler/testData/codegen/box/multifileClasses/optimized/overlappingFuns.kt index 804334e454e..c4d10a6bc95 100644 --- a/compiler/testData/codegen/box/multifileClasses/optimized/overlappingFuns.kt +++ b/compiler/testData/codegen/box/multifileClasses/optimized/overlappingFuns.kt @@ -2,7 +2,7 @@ // TARGET_BACKEND: JVM // IGNORE_LIGHT_ANALYSIS // WITH_RUNTIME -// KOTLIN_CONFIGURATION_FLAGS: +JVM.INHERIT_MULTIFILE_PARTS +// !INHERIT_MULTIFILE_PARTS // FILE: box.kt import a.* diff --git a/compiler/testData/codegen/box/multifileClasses/optimized/overlappingVals.kt b/compiler/testData/codegen/box/multifileClasses/optimized/overlappingVals.kt index 71360d768b5..58eeb0f0b94 100644 --- a/compiler/testData/codegen/box/multifileClasses/optimized/overlappingVals.kt +++ b/compiler/testData/codegen/box/multifileClasses/optimized/overlappingVals.kt @@ -2,7 +2,7 @@ // TARGET_BACKEND: JVM // IGNORE_LIGHT_ANALYSIS // WITH_RUNTIME -// KOTLIN_CONFIGURATION_FLAGS: +JVM.INHERIT_MULTIFILE_PARTS +// !INHERIT_MULTIFILE_PARTS // FILE: box.kt import a.* diff --git a/compiler/testData/codegen/box/multifileClasses/optimized/valAccessFromInlineFunCalledFromJava.kt b/compiler/testData/codegen/box/multifileClasses/optimized/valAccessFromInlineFunCalledFromJava.kt index 2eb7a9ec54b..f334f8239ca 100644 --- a/compiler/testData/codegen/box/multifileClasses/optimized/valAccessFromInlineFunCalledFromJava.kt +++ b/compiler/testData/codegen/box/multifileClasses/optimized/valAccessFromInlineFunCalledFromJava.kt @@ -2,7 +2,7 @@ // TARGET_BACKEND: JVM // IGNORE_LIGHT_ANALYSIS // WITH_RUNTIME -// KOTLIN_CONFIGURATION_FLAGS: +JVM.INHERIT_MULTIFILE_PARTS +// !INHERIT_MULTIFILE_PARTS // FILE: box.kt import a.* diff --git a/compiler/testData/codegen/box/multifileClasses/optimized/valAccessFromInlinedToDifferentPackage.kt b/compiler/testData/codegen/box/multifileClasses/optimized/valAccessFromInlinedToDifferentPackage.kt index 46b814c7fd1..5f4c1f015e1 100644 --- a/compiler/testData/codegen/box/multifileClasses/optimized/valAccessFromInlinedToDifferentPackage.kt +++ b/compiler/testData/codegen/box/multifileClasses/optimized/valAccessFromInlinedToDifferentPackage.kt @@ -2,7 +2,7 @@ // TARGET_BACKEND: JVM // IGNORE_LIGHT_ANALYSIS // WITH_RUNTIME -// KOTLIN_CONFIGURATION_FLAGS: +JVM.INHERIT_MULTIFILE_PARTS +// !INHERIT_MULTIFILE_PARTS // FILE: box.kt import a.* diff --git a/compiler/testData/codegen/box/multifileClasses/optimized/valWithAccessor.kt b/compiler/testData/codegen/box/multifileClasses/optimized/valWithAccessor.kt index e47c2a619c8..2c06c9b4c8f 100644 --- a/compiler/testData/codegen/box/multifileClasses/optimized/valWithAccessor.kt +++ b/compiler/testData/codegen/box/multifileClasses/optimized/valWithAccessor.kt @@ -1,7 +1,7 @@ // TARGET_BACKEND: JVM // IGNORE_LIGHT_ANALYSIS // WITH_RUNTIME -// KOTLIN_CONFIGURATION_FLAGS: +JVM.INHERIT_MULTIFILE_PARTS +// !INHERIT_MULTIFILE_PARTS // FILE: box.kt import a.* diff --git a/compiler/testData/codegen/boxInline/multifileClasses/inlineFromOptimizedMultifileClass.kt b/compiler/testData/codegen/boxInline/multifileClasses/inlineFromOptimizedMultifileClass.kt index 471983b0480..f867a2d6ee0 100644 --- a/compiler/testData/codegen/boxInline/multifileClasses/inlineFromOptimizedMultifileClass.kt +++ b/compiler/testData/codegen/boxInline/multifileClasses/inlineFromOptimizedMultifileClass.kt @@ -1,7 +1,7 @@ // IGNORE_BACKEND: JVM_IR // TARGET_BACKEND: JVM // WITH_RUNTIME -// KOTLIN_CONFIGURATION_FLAGS: +JVM.INHERIT_MULTIFILE_PARTS +// !INHERIT_MULTIFILE_PARTS // FILE: 1.kt @file:[JvmName("MultifileClass") JvmMultifileClass] diff --git a/compiler/testData/codegen/bytecodeText/multifileClasses/optimizedMultifileClassFacadeMethods.kt b/compiler/testData/codegen/bytecodeText/multifileClasses/optimizedMultifileClassFacadeMethods.kt index edd2515bde1..c15d3dbe1cb 100644 --- a/compiler/testData/codegen/bytecodeText/multifileClasses/optimizedMultifileClassFacadeMethods.kt +++ b/compiler/testData/codegen/bytecodeText/multifileClasses/optimizedMultifileClassFacadeMethods.kt @@ -1,5 +1,5 @@ // IGNORE_BACKEND: JVM_IR -// KOTLIN_CONFIGURATION_FLAGS: +JVM.INHERIT_MULTIFILE_PARTS +// !INHERIT_MULTIFILE_PARTS // FILE: bar.kt @file:JvmName("Util") diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/CompilerTestLanguageVersionSettings.kt b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/CompilerTestLanguageVersionSettings.kt index c8f069afd9b..b5470a9239f 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/CompilerTestLanguageVersionSettings.kt +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/checkers/CompilerTestLanguageVersionSettings.kt @@ -21,6 +21,7 @@ const val IGNORE_DATA_FLOW_IN_ASSERT_DIRECTIVE = "IGNORE_DATA_FLOW_IN_ASSERT" const val JVM_DEFAULT_MODE = "JVM_DEFAULT_MODE" const val SKIP_METADATA_VERSION_CHECK = "SKIP_METADATA_VERSION_CHECK" const val ALLOW_RESULT_RETURN_TYPE = "ALLOW_RESULT_RETURN_TYPE" +const val INHERIT_MULTIFILE_PARTS = "INHERIT_MULTIFILE_PARTS" data class CompilerTestLanguageVersionSettings( private val initialLanguageFeatures: Map, @@ -59,9 +60,11 @@ fun parseLanguageVersionSettings(directiveMap: Map): CompilerTes val enableJvmDefault = directiveMap[JVM_DEFAULT_MODE]?.let { JvmAnalysisFlags.jvmDefaultMode to JvmDefaultMode.fromStringOrNull(it)!! } val skipMetadataVersionCheck = AnalysisFlags.skipMetadataVersionCheck to directiveMap.containsKey(SKIP_METADATA_VERSION_CHECK) val allowResultReturnType = AnalysisFlags.allowResultReturnType to directiveMap.containsKey(ALLOW_RESULT_RETURN_TYPE) + val inheritMultifileParts = JvmAnalysisFlags.inheritMultifileParts to directiveMap.containsKey(INHERIT_MULTIFILE_PARTS) if (apiVersionString == null && languageFeaturesString == null && experimental == null && useExperimental == null && - !ignoreDataFlowInAssert.second && enableJvmDefault == null && !skipMetadataVersionCheck.second && !allowResultReturnType.second + !ignoreDataFlowInAssert.second && enableJvmDefault == null && !skipMetadataVersionCheck.second && !allowResultReturnType.second && + !inheritMultifileParts.second ) { return null } @@ -77,7 +80,8 @@ fun parseLanguageVersionSettings(directiveMap: Map): CompilerTes languageFeatures, apiVersion, languageVersion, mapOf( *listOfNotNull( - experimental, useExperimental, enableJvmDefault, ignoreDataFlowInAssert, skipMetadataVersionCheck, allowResultReturnType + experimental, useExperimental, enableJvmDefault, ignoreDataFlowInAssert, skipMetadataVersionCheck, allowResultReturnType, + inheritMultifileParts ).toTypedArray() ) ) diff --git a/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/CodegenTestCase.java b/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/CodegenTestCase.java index 227e97d26bf..f0f31f7c68d 100644 --- a/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/CodegenTestCase.java +++ b/compiler/tests-common/tests/org/jetbrains/kotlin/codegen/CodegenTestCase.java @@ -207,17 +207,17 @@ public abstract class CodegenTestCase extends KtUsefulTestCase { } } - if (explicitLanguageVersionSettings != null) { - CommonConfigurationKeysKt.setLanguageVersionSettings(configuration, explicitLanguageVersionSettings); - } - else if (disableReleaseCoroutines) { - CompilerTestLanguageVersionSettings compilerLanguageVersionSettings = new CompilerTestLanguageVersionSettings( + if (disableReleaseCoroutines) { + explicitLanguageVersionSettings = new CompilerTestLanguageVersionSettings( Collections.singletonMap(LanguageFeature.ReleaseCoroutines, LanguageFeature.State.DISABLED), ApiVersion.LATEST_STABLE, LanguageVersion.LATEST_STABLE, Collections.emptyMap() ); - CommonConfigurationKeysKt.setLanguageVersionSettings(configuration, compilerLanguageVersionSettings); + } + + if (explicitLanguageVersionSettings != null) { + CommonConfigurationKeysKt.setLanguageVersionSettings(configuration, explicitLanguageVersionSettings); } updateConfigurationWithFlags(configuration, kotlinConfigurationFlags);