diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FileClassLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FileClassLowering.kt index c84e95fe287..8f935fe7c04 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FileClassLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/FileClassLowering.kt @@ -21,6 +21,7 @@ import org.jetbrains.kotlin.backend.common.ir.createImplicitParameterDeclaration import org.jetbrains.kotlin.backend.common.phaser.makeIrModulePhase import org.jetbrains.kotlin.backend.jvm.JvmBackendContext import org.jetbrains.kotlin.codegen.AsmUtil +import org.jetbrains.kotlin.config.JvmAnalysisFlags import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.descriptors.Modality @@ -28,20 +29,17 @@ import org.jetbrains.kotlin.descriptors.Visibilities import org.jetbrains.kotlin.fileClasses.JvmFileClassInfo import org.jetbrains.kotlin.fileClasses.JvmFileClassUtil import org.jetbrains.kotlin.fileClasses.JvmSimpleFileClassInfo -import org.jetbrains.kotlin.ir.builders.declarations.buildClass import org.jetbrains.kotlin.ir.declarations.* import org.jetbrains.kotlin.ir.declarations.impl.IrClassImpl import org.jetbrains.kotlin.ir.descriptors.WrappedClassDescriptor import org.jetbrains.kotlin.ir.symbols.impl.IrClassSymbolImpl import org.jetbrains.kotlin.ir.util.NaiveSourceBasedFileEntryImpl import org.jetbrains.kotlin.ir.util.fqNameWhenAvailable +import org.jetbrains.kotlin.load.java.JavaVisibilities import org.jetbrains.kotlin.load.kotlin.PackagePartClassUtils -import org.jetbrains.kotlin.name.FqName -import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi2ir.PsiSourceManager import org.jetbrains.kotlin.resolve.jvm.JvmClassName import org.jetbrains.kotlin.resolve.source.KotlinSourceElement -import java.io.File import java.util.* internal val fileClassPhase = makeIrModulePhase( @@ -97,11 +95,12 @@ private class FileClassLowering(val context: JvmBackendContext) : FileLoweringPa } return IrClassImpl( 0, fileEntry.maxOffset, - if (!fileClassInfo.withJvmMultifileClass) IrDeclarationOrigin.FILE_CLASS else IrDeclarationOrigin.MULTIFILE_PART_CLASS, + if (!fileClassInfo.withJvmMultifileClass || context.state.languageVersionSettings.getFlag(JvmAnalysisFlags.inheritMultifileParts)) + IrDeclarationOrigin.FILE_CLASS else IrDeclarationOrigin.SYNTHETIC_FILE_CLASS, symbol = IrClassSymbolImpl(descriptor), name = fileClassInfo.fileClassFqName.shortName(), kind = ClassKind.CLASS, - visibility = if (!fileClassInfo.withJvmMultifileClass) Visibilities.PUBLIC else Visibilities.PRIVATE, + visibility = if (!fileClassInfo.withJvmMultifileClass) Visibilities.PUBLIC else JavaVisibilities.PACKAGE_VISIBILITY, modality = Modality.FINAL, isCompanion = false, isInner = false, diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin.kt index 77f0b90b6db..aed566ccbca 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/IrDeclarationOrigin.kt @@ -37,7 +37,7 @@ interface IrDeclarationOrigin { object MOVED_EXTENSION_RECEIVER : IrDeclarationOriginImpl("MOVED_EXTENSION_RECEIVER") object FILE_CLASS : IrDeclarationOriginImpl("FILE_CLASS") - object MULTIFILE_PART_CLASS : IrDeclarationOriginImpl("MULTIFILE_PART_CLASS", isSynthetic = true) + object SYNTHETIC_FILE_CLASS : IrDeclarationOriginImpl("SYNTHETIC_FILE_CLASS", isSynthetic = true) object GENERATED_DATA_CLASS_MEMBER : IrDeclarationOriginImpl("GENERATED_DATA_CLASS_MEMBER") object GENERATED_INLINE_CLASS_MEMBER : IrDeclarationOriginImpl("GENERATED_INLINE_CLASS_MEMBER") object LOCAL_FUNCTION_FOR_LAMBDA : IrDeclarationOriginImpl("LOCAL_FUNCTION_FOR_LAMBDA") diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt index dac12f974e4..7f17f59b825 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/util/IrUtils.kt @@ -672,4 +672,4 @@ fun SymbolTable.findOrDeclareExternalPackageFragment(descriptor: PackageFragment }.owner val IrDeclaration.isFileClass: Boolean - get() = origin == IrDeclarationOrigin.FILE_CLASS || origin == IrDeclarationOrigin.MULTIFILE_PART_CLASS + get() = origin == IrDeclarationOrigin.FILE_CLASS || origin == IrDeclarationOrigin.SYNTHETIC_FILE_CLASS diff --git a/compiler/testData/codegen/bytecodeText/flagsInMultiFileInherit.kt b/compiler/testData/codegen/bytecodeText/flagsInMultiFileInherit.kt new file mode 100644 index 00000000000..35de2d66d49 --- /dev/null +++ b/compiler/testData/codegen/bytecodeText/flagsInMultiFileInherit.kt @@ -0,0 +1,16 @@ +// !INHERIT_MULTIFILE_PARTS +@file:kotlin.jvm.JvmMultifileClass +@file:kotlin.jvm.JvmName("Test") + +fun foo() { + +} + + +/* ACC_PUBLIC ACC_FINAL ACC_SUPER */ +// 1 access flags 0x31 +// 1 public final class Test extends Test__FlagsInMultiFileInheritKt + +/* ACC_SUPER */ +// 1 access flags 0x20 +// 1 class Test__FlagsInMultiFileInheritKt diff --git a/compiler/testData/codegen/bytecodeText/superFlagInMultiFileFacade.kt b/compiler/testData/codegen/bytecodeText/superFlagInMultiFileFacade.kt index 4c5b29c5e83..30862df81b1 100644 --- a/compiler/testData/codegen/bytecodeText/superFlagInMultiFileFacade.kt +++ b/compiler/testData/codegen/bytecodeText/superFlagInMultiFileFacade.kt @@ -6,8 +6,10 @@ fun foo() { } -/*ACC_PUBLIC ACC_FINAL ACC_SUPER */ +/* ACC_PUBLIC ACC_FINAL ACC_SUPER */ // 1 access flags 0x31 +// 1 public final class Test -/*ACC_SYNTHETIC ACC_FINAL ACC_SUPER */ -// 1 access flags 0x1030 \ No newline at end of file +/* ACC_SYNTHETIC ACC_FINAL ACC_SUPER */ +// 1 access flags 0x1030 +// 1 final synthetic class Test__SuperFlagInMultiFileFacadeKt \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java index c4200354459..bf67a54a256 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BytecodeTextTestGenerated.java @@ -114,6 +114,11 @@ public class BytecodeTextTestGenerated extends AbstractBytecodeTextTest { runTest("compiler/testData/codegen/bytecodeText/falseSmartCast.kt"); } + @TestMetadata("flagsInMultiFileInherit.kt") + public void testFlagsInMultiFileInherit() throws Exception { + runTest("compiler/testData/codegen/bytecodeText/flagsInMultiFileInherit.kt"); + } + @TestMetadata("inlineFromOtherModule.kt") public void testInlineFromOtherModule() throws Exception { runTest("compiler/testData/codegen/bytecodeText/inlineFromOtherModule.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeTextTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeTextTestGenerated.java index 94ff61b525d..20129099942 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeTextTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/ir/IrBytecodeTextTestGenerated.java @@ -114,6 +114,11 @@ public class IrBytecodeTextTestGenerated extends AbstractIrBytecodeTextTest { runTest("compiler/testData/codegen/bytecodeText/falseSmartCast.kt"); } + @TestMetadata("flagsInMultiFileInherit.kt") + public void testFlagsInMultiFileInherit() throws Exception { + runTest("compiler/testData/codegen/bytecodeText/flagsInMultiFileInherit.kt"); + } + @TestMetadata("inlineFromOtherModule.kt") public void testInlineFromOtherModule() throws Exception { runTest("compiler/testData/codegen/bytecodeText/inlineFromOtherModule.kt");