diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanSerializerExtension.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanSerializerExtension.kt index 99b17506492..f65905a2b72 100644 --- a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanSerializerExtension.kt +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanSerializerExtension.kt @@ -35,6 +35,8 @@ import org.jetbrains.kotlin.types.FlexibleType internal class KonanSerializerExtension(val context: Context) : KotlinSerializerExtensionBase(KonanSerializerProtocol) { + override val stringTable = KonanStringTable() + private val backingFieldClass = context.builtIns.getKonanInternalClass("HasBackingField").getDefaultType() diff --git a/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanStringTable.kt b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanStringTable.kt new file mode 100644 index 00000000000..b69f256d742 --- /dev/null +++ b/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/serialization/KonanStringTable.kt @@ -0,0 +1,26 @@ +package org.jetbrains.kotlin.backend.konan.serialization + +import org.jetbrains.kotlin.descriptors.* +import org.jetbrains.kotlin.serialization.StringTableImpl +import org.jetbrains.kotlin.resolve.DescriptorUtils +import org.jetbrains.kotlin.resolve.descriptorUtil.getAllSuperClassifiers +import org.jetbrains.kotlin.resolve.descriptorUtil.module + +class KonanStringTable : StringTableImpl() { + override fun getFqNameIndexOfLocalAnonymousClass(descriptor: ClassifierDescriptorWithTypeParameters): Int { + return if (descriptor.containingDeclaration is CallableMemberDescriptor) { + val superClassifiers = descriptor.getAllSuperClassifiers() + .mapNotNull { it as ClassifierDescriptorWithTypeParameters } + .filter { it != descriptor } + .toList() + if (superClassifiers.size == 1) { + getFqNameIndex(superClassifiers[0]) + } else { + val superClass = superClassifiers.find { !DescriptorUtils.isInterface(it) } + getFqNameIndex(superClass ?: descriptor.module.builtIns.any) + } + } else { + super.getFqNameIndexOfLocalAnonymousClass(descriptor) + } + } +}