diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ClassCodegen.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ClassCodegen.kt index 034062e5301..0b104c33502 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ClassCodegen.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/ClassCodegen.kt @@ -205,6 +205,7 @@ class ClassCodegen private constructor( val kind = when { facadeClassName != null -> KotlinClassHeader.Kind.MULTIFILE_CLASS_PART metadata is MetadataSource.Class -> KotlinClassHeader.Kind.CLASS + metadata is MetadataSource.Script -> KotlinClassHeader.Kind.CLASS metadata is MetadataSource.File -> KotlinClassHeader.Kind.FILE_FACADE metadata is MetadataSource.Function -> KotlinClassHeader.Kind.SYNTHETIC_CLASS entry is MultifileFacadeFileEntry -> KotlinClassHeader.Kind.MULTIFILE_CLASS @@ -217,6 +218,9 @@ class ClassCodegen private constructor( if (isMultifileClassOrPart && state.languageVersionSettings.getFlag(JvmAnalysisFlags.inheritMultifileParts)) { extraFlags = extraFlags or JvmAnnotationNames.METADATA_MULTIFILE_PARTS_INHERIT_FLAG } + if (metadata is MetadataSource.Script) { + extraFlags = extraFlags or JvmAnnotationNames.METADATA_SCRIPT_FLAG + } writeKotlinMetadata(visitor, state, kind, extraFlags) { if (metadata != null) { diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/DescriptorMetadataSerializer.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/DescriptorMetadataSerializer.kt index 1cb1a5bca1a..2491b086839 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/DescriptorMetadataSerializer.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/codegen/DescriptorMetadataSerializer.kt @@ -34,6 +34,9 @@ class DescriptorMetadataSerializer( is DescriptorMetadataSource.Class -> DescriptorSerializer.create( metadata.descriptor, serializerExtension, (parent as? DescriptorMetadataSerializer)?.serializer, context.state.project ) + is DescriptorMetadataSource.Script -> DescriptorSerializer.create( + metadata.descriptor, serializerExtension, (parent as? DescriptorMetadataSerializer)?.serializer, context.state.project + ) is DescriptorMetadataSource.File -> DescriptorSerializer.createTopLevel(serializerExtension) is DescriptorMetadataSource.Function -> DescriptorSerializer.createForLambda(serializerExtension) else -> null @@ -55,6 +58,7 @@ class DescriptorMetadataSerializer( } val message = when (metadata) { is DescriptorMetadataSource.Class -> serializer!!.classProto(metadata.descriptor).build() + is DescriptorMetadataSource.Script -> serializer!!.classProto(metadata.descriptor).build() is DescriptorMetadataSource.File -> serializer!!.packagePartProto(irClass.getPackageFragment()!!.fqName, metadata.descriptors).apply { serializerExtension.serializeJvmPackage(this, type) diff --git a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ScriptGenerator.kt b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ScriptGenerator.kt index b4437889b63..137839e1af2 100644 --- a/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ScriptGenerator.kt +++ b/compiler/ir/ir.psi2ir/src/org/jetbrains/kotlin/psi2ir/generators/ScriptGenerator.kt @@ -45,7 +45,7 @@ class ScriptGenerator(declarationGenerator: DeclarationGenerator) : DeclarationG return context.symbolTable.declareScript(descriptor).buildWithScope { irScript -> - irScript.metadata = DescriptorMetadataSource.Class(descriptor) + irScript.metadata = DescriptorMetadataSource.Script(descriptor) val importedScripts = descriptor.implicitReceivers.filterIsInstanceTo(HashSet()) diff --git a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/MetadataSource.kt b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/MetadataSource.kt index e3e11a6d565..fad74961031 100644 --- a/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/MetadataSource.kt +++ b/compiler/ir/ir.tree/src/org/jetbrains/kotlin/ir/declarations/MetadataSource.kt @@ -13,6 +13,7 @@ interface MetadataSource { interface File : MetadataSource interface Class : MetadataSource + interface Script : MetadataSource interface Function : MetadataSource interface Property : MetadataSource { val isConst: Boolean @@ -30,6 +31,8 @@ sealed class DescriptorMetadataSource : MetadataSource { class Class(override val descriptor: ClassDescriptor) : DescriptorMetadataSource(), MetadataSource.Class + class Script(override val descriptor: ScriptDescriptor) : DescriptorMetadataSource(), MetadataSource.Script + class Function(override val descriptor: FunctionDescriptor) : DescriptorMetadataSource(), MetadataSource.Function class Property(override val descriptor: PropertyDescriptor) : DescriptorMetadataSource(), MetadataSource.Property {