Write "hasEnumEntries" flag into metadata when feature enabled
^KT-53929 Fixed
This commit is contained in:
+3
-1
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.backend.jvm.serialization.JvmIrSerializerSession
|
||||
import org.jetbrains.kotlin.config.CompilerConfiguration
|
||||
import org.jetbrains.kotlin.config.JVMConfigurationKeys
|
||||
import org.jetbrains.kotlin.config.JvmSerializeIrMode
|
||||
import org.jetbrains.kotlin.config.languageVersionSettings
|
||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFile
|
||||
import org.jetbrains.kotlin.ir.util.irMessageLogger
|
||||
@@ -38,6 +39,7 @@ class JvmIrSerializerImpl(private val configuration: CompilerConfiguration) : Jv
|
||||
declarationTable,
|
||||
mutableMapOf(),
|
||||
configuration.get(JVMConfigurationKeys.SERIALIZE_IR) ?: JvmSerializeIrMode.NONE,
|
||||
fileClassFqName
|
||||
fileClassFqName,
|
||||
configuration.languageVersionSettings,
|
||||
)
|
||||
}
|
||||
+13
-5
@@ -12,6 +12,7 @@ import org.jetbrains.kotlin.codegen.binding.CodegenBinding
|
||||
import org.jetbrains.kotlin.codegen.createFreeFakeLambdaDescriptor
|
||||
import org.jetbrains.kotlin.codegen.serialization.JvmSerializationBindings
|
||||
import org.jetbrains.kotlin.codegen.serialization.JvmSerializerExtension
|
||||
import org.jetbrains.kotlin.config.languageVersionSettings
|
||||
import org.jetbrains.kotlin.ir.declarations.DescriptorMetadataSource
|
||||
import org.jetbrains.kotlin.ir.declarations.IrClass
|
||||
import org.jetbrains.kotlin.ir.declarations.IrDeclarationOrigin
|
||||
@@ -32,18 +33,25 @@ class DescriptorMetadataSerializer(
|
||||
parent: MetadataSerializer?
|
||||
) : MetadataSerializer {
|
||||
private val serializerExtension = JvmSerializerExtension(serializationBindings, context.state, context.defaultTypeMapper)
|
||||
private val serializer: DescriptorSerializer? =
|
||||
private val serializer: DescriptorSerializer? = run {
|
||||
val languageVersionSettings = context.state.configuration.languageVersionSettings
|
||||
when (val metadata = irClass.metadata) {
|
||||
is DescriptorMetadataSource.Class -> DescriptorSerializer.create(
|
||||
metadata.descriptor, serializerExtension, (parent as? DescriptorMetadataSerializer)?.serializer, context.state.project
|
||||
metadata.descriptor, serializerExtension, (parent as? DescriptorMetadataSerializer)?.serializer,
|
||||
languageVersionSettings, context.state.project,
|
||||
)
|
||||
is DescriptorMetadataSource.Script -> DescriptorSerializer.create(
|
||||
metadata.descriptor, serializerExtension, (parent as? DescriptorMetadataSerializer)?.serializer, context.state.project
|
||||
metadata.descriptor, serializerExtension, (parent as? DescriptorMetadataSerializer)?.serializer,
|
||||
languageVersionSettings, context.state.project,
|
||||
)
|
||||
is DescriptorMetadataSource.File -> DescriptorSerializer.createTopLevel(serializerExtension, context.state.project)
|
||||
is DescriptorMetadataSource.Function -> DescriptorSerializer.createForLambda(serializerExtension)
|
||||
is DescriptorMetadataSource.File -> DescriptorSerializer.createTopLevel(
|
||||
serializerExtension, languageVersionSettings,
|
||||
context.state.project
|
||||
)
|
||||
is DescriptorMetadataSource.Function -> DescriptorSerializer.createForLambda(serializerExtension, languageVersionSettings)
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
|
||||
override fun serialize(metadata: MetadataSource): Pair<MessageLite, JvmStringTable>? {
|
||||
val localDelegatedProperties = context.localDelegatedProperties[irClass.attributeOwnerId]
|
||||
|
||||
+3
-1
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.backend.common.serialization
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.serialization.encodings.*
|
||||
import org.jetbrains.kotlin.backend.common.serialization.proto.IrSimpleTypeNullability
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.descriptors.*
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.IrFileEntry
|
||||
@@ -117,6 +118,7 @@ open class IrFileSerializer(
|
||||
private val declarationTable: DeclarationTable,
|
||||
private val expectDescriptorToSymbol: MutableMap<DeclarationDescriptor, IrSymbol>,
|
||||
private val compatibilityMode: CompatibilityMode,
|
||||
private val languageVersionSettings: LanguageVersionSettings,
|
||||
private val bodiesOnlyForInlines: Boolean = false,
|
||||
private val skipExpects: Boolean = false,
|
||||
private val addDebugInfo: Boolean = true,
|
||||
@@ -1228,7 +1230,7 @@ open class IrFileSerializer(
|
||||
|
||||
private fun serializeIrClass(clazz: IrClass): ProtoClass {
|
||||
val proto = ProtoClass.newBuilder()
|
||||
.setBase(serializeIrDeclarationBase(clazz, ClassFlags.encode(clazz)))
|
||||
.setBase(serializeIrDeclarationBase(clazz, ClassFlags.encode(clazz, languageVersionSettings)))
|
||||
.setName(serializeName(clazz.name))
|
||||
|
||||
|
||||
|
||||
+6
-2
@@ -6,6 +6,8 @@
|
||||
package org.jetbrains.kotlin.backend.common.serialization.encodings
|
||||
|
||||
import org.jetbrains.kotlin.backend.common.serialization.IrFlags
|
||||
import org.jetbrains.kotlin.config.LanguageFeature
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.descriptors.DescriptorVisibility
|
||||
@@ -33,15 +35,17 @@ value class ClassFlags(val flags: Long) {
|
||||
val isFun: Boolean get() = IrFlags.IS_FUN_INTERFACE.get(flags.toInt())
|
||||
|
||||
companion object {
|
||||
fun encode(clazz: IrClass): Long {
|
||||
fun encode(clazz: IrClass, languageVersionSettings: LanguageVersionSettings): Long {
|
||||
return clazz.run {
|
||||
val hasAnnotation = annotations.isNotEmpty()
|
||||
val visibility = ProtoEnumFlags.descriptorVisibility(visibility.normalize())
|
||||
val modality = ProtoEnumFlags.modality(modality)
|
||||
val kind = ProtoEnumFlags.classKind(kind, isCompanion)
|
||||
|
||||
val hasEnumEntries = kind == ProtoBuf.Class.Kind.ENUM_CLASS &&
|
||||
languageVersionSettings.supportsFeature(LanguageFeature.EnumEntries)
|
||||
val flags = IrFlags.getClassFlags(
|
||||
hasAnnotation, visibility, modality, kind, isInner, isData, isExternal, isExpect, isValue, isFun
|
||||
hasAnnotation, visibility, modality, kind, isInner, isData, isExternal, isExpect, isValue, isFun, hasEnumEntries
|
||||
)
|
||||
|
||||
flags.toLong()
|
||||
|
||||
+2
-2
@@ -58,7 +58,7 @@ abstract class KlibMetadataSerializer(
|
||||
)
|
||||
return SerializerContext(
|
||||
extension,
|
||||
DescriptorSerializer.createTopLevel(extension, project)
|
||||
DescriptorSerializer.createTopLevel(extension, languageVersionSettings, project)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -73,7 +73,7 @@ abstract class KlibMetadataSerializer(
|
||||
with(serializerContext) {
|
||||
val previousSerializer = classSerializer
|
||||
|
||||
classSerializer = DescriptorSerializer.create(classDescriptor, serializerExtension, classSerializer, project)
|
||||
classSerializer = DescriptorSerializer.create(classDescriptor, serializerExtension, classSerializer, languageVersionSettings, project)
|
||||
val classProto = classSerializer.classProto(classDescriptor).build() ?: error("Class not serialized: $classDescriptor")
|
||||
//builder.addClass(classProto)
|
||||
|
||||
|
||||
@@ -62,7 +62,6 @@ import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.psi2ir.Psi2IrConfiguration
|
||||
import org.jetbrains.kotlin.psi2ir.Psi2IrTranslator
|
||||
import org.jetbrains.kotlin.psi2ir.descriptors.IrBuiltInsOverDescriptors
|
||||
import org.jetbrains.kotlin.psi2ir.generators.DeclarationStubGeneratorImpl
|
||||
import org.jetbrains.kotlin.psi2ir.generators.GeneratorContext
|
||||
import org.jetbrains.kotlin.psi2ir.generators.TypeTranslatorImpl
|
||||
import org.jetbrains.kotlin.resolve.BindingContext
|
||||
@@ -622,6 +621,7 @@ fun serializeModuleIntoKlib(
|
||||
skipExpects = !configuration.expectActualLinker,
|
||||
normalizeAbsolutePaths = absolutePathNormalization,
|
||||
sourceBaseDirs = sourceBaseDirs,
|
||||
configuration.languageVersionSettings,
|
||||
signatureClashChecks
|
||||
).serializedIrModule(moduleFragment)
|
||||
|
||||
|
||||
+3
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.ir.backend.js.lower.serialization.ir
|
||||
import org.jetbrains.kotlin.backend.common.serialization.CompatibilityMode
|
||||
import org.jetbrains.kotlin.backend.common.serialization.DeclarationTable
|
||||
import org.jetbrains.kotlin.backend.common.serialization.IrFileSerializer
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
import org.jetbrains.kotlin.ir.declarations.IrAnnotationContainer
|
||||
import org.jetbrains.kotlin.ir.symbols.IrSymbol
|
||||
@@ -21,6 +22,7 @@ class JsIrFileSerializer(
|
||||
expectDescriptorToSymbol: MutableMap<DeclarationDescriptor, IrSymbol>,
|
||||
compatibilityMode: CompatibilityMode,
|
||||
skipExpects: Boolean,
|
||||
languageVersionSettings: LanguageVersionSettings,
|
||||
bodiesOnlyForInlines: Boolean = false,
|
||||
normalizeAbsolutePaths: Boolean,
|
||||
sourceBaseDirs: Collection<String>
|
||||
@@ -29,6 +31,7 @@ class JsIrFileSerializer(
|
||||
declarationTable,
|
||||
expectDescriptorToSymbol,
|
||||
compatibilityMode,
|
||||
languageVersionSettings,
|
||||
bodiesOnlyForInlines = bodiesOnlyForInlines,
|
||||
skipExpects = skipExpects,
|
||||
normalizeAbsolutePaths = normalizeAbsolutePaths,
|
||||
|
||||
+4
-1
@@ -9,6 +9,7 @@ import org.jetbrains.kotlin.backend.common.serialization.CompatibilityMode
|
||||
import org.jetbrains.kotlin.backend.common.serialization.DeclarationTable
|
||||
import org.jetbrains.kotlin.backend.common.serialization.IdSignatureClashTracker
|
||||
import org.jetbrains.kotlin.backend.common.serialization.IrModuleSerializer
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
import org.jetbrains.kotlin.ir.IrBuiltIns
|
||||
import org.jetbrains.kotlin.ir.declarations.IrFile
|
||||
@@ -23,6 +24,7 @@ class JsIrModuleSerializer(
|
||||
val skipExpects: Boolean,
|
||||
normalizeAbsolutePaths: Boolean,
|
||||
sourceBaseDirs: Collection<String>,
|
||||
private val languageVersionSettings: LanguageVersionSettings,
|
||||
shouldCheckSignaturesOnUniqueness: Boolean = true
|
||||
) : IrModuleSerializer<JsIrFileSerializer>(messageLogger, compatibilityMode, normalizeAbsolutePaths, sourceBaseDirs) {
|
||||
|
||||
@@ -39,6 +41,7 @@ class JsIrModuleSerializer(
|
||||
compatibilityMode = compatibilityMode,
|
||||
skipExpects = skipExpects,
|
||||
normalizeAbsolutePaths = normalizeAbsolutePaths,
|
||||
sourceBaseDirs = sourceBaseDirs
|
||||
sourceBaseDirs = sourceBaseDirs,
|
||||
languageVersionSettings = languageVersionSettings,
|
||||
)
|
||||
}
|
||||
+3
-1
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.backend.common.serialization.DeclarationTable
|
||||
import org.jetbrains.kotlin.backend.common.serialization.IrFileSerializer
|
||||
import org.jetbrains.kotlin.backend.jvm.serialization.proto.JvmIr
|
||||
import org.jetbrains.kotlin.config.JvmSerializeIrMode
|
||||
import org.jetbrains.kotlin.config.LanguageVersionSettings
|
||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||
import org.jetbrains.kotlin.ir.IrElement
|
||||
import org.jetbrains.kotlin.ir.declarations.*
|
||||
@@ -25,9 +26,10 @@ class JvmIrSerializerSession(
|
||||
expectDescriptorToSymbol: MutableMap<DeclarationDescriptor, IrSymbol>,
|
||||
private val mode: JvmSerializeIrMode,
|
||||
private val fileClassFqName: FqName,
|
||||
languageVersionSettings: LanguageVersionSettings,
|
||||
skipExpects: Boolean = false,
|
||||
) : IrFileSerializer(
|
||||
messageLogger, declarationTable, expectDescriptorToSymbol, CompatibilityMode.CURRENT,
|
||||
messageLogger, declarationTable, expectDescriptorToSymbol, CompatibilityMode.CURRENT, languageVersionSettings,
|
||||
bodiesOnlyForInlines = mode == JvmSerializeIrMode.INLINE,
|
||||
skipExpects, normalizeAbsolutePaths = false, sourceBaseDirs = emptyList()
|
||||
) {
|
||||
|
||||
Reference in New Issue
Block a user