Add script metedata flag

This commit is contained in:
Ilya Chernikov
2021-03-05 09:56:53 +01:00
parent 7c63105bb7
commit e05c8ac57b
4 changed files with 12 additions and 1 deletions
@@ -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) {
@@ -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)
@@ -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<ScriptDescriptor>())
@@ -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 {