From 9b157fd291d581a30a3194940b0ebbb95a2fd247 Mon Sep 17 00:00:00 2001 From: pyos Date: Tue, 15 Sep 2020 16:10:28 +0200 Subject: [PATCH] JVM_IR: remove a descriptor-related hack from InterfaceLowering It will break with FIR. --- .../backend/jvm/codegen/DescriptorMetadataSerializer.kt | 4 +++- .../kotlin/backend/jvm/lower/InterfaceLowering.kt | 7 ------- 2 files changed, 3 insertions(+), 8 deletions(-) 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 b2bd195a4f0..f15cff12a48 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 @@ -41,7 +41,9 @@ class DescriptorMetadataSerializer( if (localDelegatedProperties != null && localDelegatedProperties.isNotEmpty()) { context.state.bindingTrace.record( CodegenBinding.DELEGATED_PROPERTIES_WITH_METADATA, - type, + // When serializing metadata for interfaces, `JvmSerializerExtension.serializeClass` + // looks at `$DefaultImpls` for some reason that's probably related to the old backend. + if (irClass.isInterface) context.typeMapper.mapClass(context.cachedDeclarations.getDefaultImplsClass(irClass)) else type, localDelegatedProperties.mapNotNull { (it.owner.metadata as? DescriptorMetadataSource.LocalDelegatedProperty)?.descriptor } ) } diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/InterfaceLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/InterfaceLowering.kt index 6842aa804e4..2b35c8796ec 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/InterfaceLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/InterfaceLowering.kt @@ -155,13 +155,6 @@ internal class InterfaceLowering(val context: JvmBackendContext) : IrElementTran val defaultImplsIrClass = context.cachedDeclarations.getDefaultImplsClass(irClass) - // Move metadata for local delegated properties from the interface to DefaultImpls, since this is where kotlin-reflect looks for it. - val localDelegatedProperties = context.localDelegatedProperties[irClass.attributeOwnerId as IrClass] - if (localDelegatedProperties != null) { - context.localDelegatedProperties[defaultImplsIrClass.attributeOwnerId as IrClass] = localDelegatedProperties - context.localDelegatedProperties[irClass.attributeOwnerId as IrClass] = emptyList() - } - // Move $$delegatedProperties array and $assertionsDisabled field for (field in irClass.declarations.filterIsInstance()) { if (field.origin != JvmLoweredDeclarationOrigin.GENERATED_PROPERTY_REFERENCE && field.origin != JvmLoweredDeclarationOrigin.GENERATED_ASSERTION_ENABLED_FIELD)