Skip bridge generation for non real declaration on first step they would be processed later

~

~
This commit is contained in:
Mikhael Bogdanov
2017-11-30 15:01:15 +01:00
parent 4657ae06f4
commit aeb74f7e70
@@ -37,6 +37,7 @@ import org.jetbrains.kotlin.codegen.state.GenerationState
import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper
import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.CallableMemberDescriptor.Kind.DECLARATION 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.descriptors.annotations.Annotations
import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET import org.jetbrains.kotlin.ir.UNDEFINED_OFFSET
import org.jetbrains.kotlin.ir.declarations.IrClass import org.jetbrains.kotlin.ir.declarations.IrClass
@@ -74,7 +75,8 @@ class BridgeLowering(val state: GenerationState) : ClassLoweringPass {
val functions = irClass.declarations.filterIsInstance<IrFunction>().filterNot { val functions = irClass.declarations.filterIsInstance<IrFunction>().filterNot {
val descriptor = it.descriptor val descriptor = it.descriptor
descriptor is ConstructorDescriptor || descriptor is ConstructorDescriptor ||
DescriptorUtils.isStaticDeclaration(descriptor) DescriptorUtils.isStaticDeclaration(descriptor) ||
!descriptor.kind.isReal
} }
functions.forEach { 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) { if (!DescriptorUtils.isInterface(classDescriptor) && classDescriptor !is DefaultImplsClassDescriptor) {
for (memberDescriptor in DescriptorUtils.getAllDescriptors(classDescriptor.defaultType.memberScope)) { for (memberDescriptor in DescriptorUtils.getAllDescriptors(classDescriptor.defaultType.memberScope)) {
if (memberDescriptor is CallableMemberDescriptor) { if (memberDescriptor is CallableMemberDescriptor) {