From aeb74f7e7096076097cc40bcec8a3574f270990b Mon Sep 17 00:00:00 2001 From: Mikhael Bogdanov Date: Thu, 30 Nov 2017 15:01:15 +0100 Subject: [PATCH] Skip bridge generation for non real declaration on first step they would be processed later ~ ~ --- .../jetbrains/kotlin/backend/jvm/lower/BridgeLowering.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/BridgeLowering.kt b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/BridgeLowering.kt index 770ed6b955d..52e9ecc2af5 100644 --- a/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/BridgeLowering.kt +++ b/compiler/ir/backend.jvm/src/org/jetbrains/kotlin/backend/jvm/lower/BridgeLowering.kt @@ -37,6 +37,7 @@ import org.jetbrains.kotlin.codegen.state.GenerationState import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.DECLARATION +import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.FAKE_OVERRIDE import org.jetbrains.kotlin.descriptors.annotations.Annotations import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.declarations.IrClass @@ -74,7 +75,8 @@ class BridgeLowering(val state: GenerationState) : ClassLoweringPass { val functions = irClass.declarations.filterIsInstance().filterNot { val descriptor = it.descriptor descriptor is ConstructorDescriptor || - DescriptorUtils.isStaticDeclaration(descriptor) + DescriptorUtils.isStaticDeclaration(descriptor) || + !descriptor.kind.isReal } functions.forEach { @@ -82,7 +84,7 @@ class BridgeLowering(val state: GenerationState) : ClassLoweringPass { } - //additional bridges for interface methods + //additional bridges for inherited interface methods if (!DescriptorUtils.isInterface(classDescriptor) && classDescriptor !is DefaultImplsClassDescriptor) { for (memberDescriptor in DescriptorUtils.getAllDescriptors(classDescriptor.defaultType.memberScope)) { if (memberDescriptor is CallableMemberDescriptor) {