From 427a8886e456fda4e6d1d9a813f54918d49e6cc5 Mon Sep 17 00:00:00 2001 From: Mikhael Bogdanov Date: Mon, 4 Jun 2018 15:32:50 +0200 Subject: [PATCH] Reuse new descriptor in bridge lowering --- .../backend/jvm/lower/BridgeLowering.kt | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 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 6f8fd6fc276..f9e6d438cb1 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 @@ -29,7 +29,6 @@ import org.jetbrains.kotlin.backend.jvm.JvmBackendContext import org.jetbrains.kotlin.backend.jvm.JvmLoweredStatementOrigin import org.jetbrains.kotlin.backend.jvm.descriptors.DefaultImplsClassDescriptor import org.jetbrains.kotlin.backend.jvm.descriptors.JvmFunctionDescriptorImpl -import org.jetbrains.kotlin.codegen.AsmUtil.getVisibilityAccessFlag import org.jetbrains.kotlin.codegen.AsmUtil.isAbstractMethod import org.jetbrains.kotlin.codegen.BuiltinSpecialBridgesUtil import org.jetbrains.kotlin.codegen.FunctionCodegen.isMethodOfAny @@ -37,6 +36,7 @@ import org.jetbrains.kotlin.codegen.FunctionCodegen.isThereOverriddenInKotlinCla import org.jetbrains.kotlin.codegen.JvmCodegenUtil.getDirectMember import org.jetbrains.kotlin.codegen.OwnerKind import org.jetbrains.kotlin.codegen.descriptors.FileClassDescriptor +import org.jetbrains.kotlin.codegen.isToArrayFromCollection import org.jetbrains.kotlin.codegen.state.KotlinTypeMapper import org.jetbrains.kotlin.config.JvmTarget import org.jetbrains.kotlin.descriptors.* @@ -53,6 +53,7 @@ import org.jetbrains.kotlin.ir.expressions.impl.IrCallImpl import org.jetbrains.kotlin.ir.expressions.impl.IrConstImpl import org.jetbrains.kotlin.ir.expressions.impl.IrGetValueImpl import org.jetbrains.kotlin.ir.expressions.impl.IrReturnImpl +import org.jetbrains.kotlin.ir.symbols.impl.IrSimpleFunctionSymbolImpl import org.jetbrains.kotlin.ir.symbols.impl.IrVariableSymbolImpl import org.jetbrains.kotlin.ir.util.createParameterDeclarations import org.jetbrains.kotlin.load.java.BuiltinMethodsWithSpecialGenericSignature @@ -65,7 +66,6 @@ import org.jetbrains.kotlin.resolve.DescriptorUtils.isInterface import org.jetbrains.kotlin.resolve.annotations.hasJvmDefaultAnnotation import org.jetbrains.kotlin.resolve.jvm.AsmTypes.OBJECT_TYPE import org.jetbrains.kotlin.types.TypeUtils -import org.jetbrains.org.objectweb.asm.Opcodes import org.jetbrains.org.objectweb.asm.Opcodes.* import org.jetbrains.org.objectweb.asm.Type import org.jetbrains.org.objectweb.asm.commons.Method @@ -170,12 +170,18 @@ class BridgeLowering(val context: JvmBackendContext) : ClassLoweringPass { ?: error("Expect to find overridden descriptors for $descriptor") if (!isThereOverriddenInKotlinClass(descriptor)) { - val flags = Opcodes.ACC_ABSTRACT or getVisibilityAccessFlag(descriptor) - val bridgeDescriptor = JvmFunctionDescriptorImpl( - descriptor.containingDeclaration as ClassDescriptor, null, Annotations.EMPTY, - descriptor.name, CallableMemberDescriptor.Kind.SYNTHESIZED, descriptor.source, flags + // TODO: reimplement getVisibilityAccessFlag(descriptor) + val visibility = if (descriptor.isToArrayFromCollection()) Visibilities.PUBLIC else descriptor.visibility + val irFunction = IrFunctionImpl( + UNDEFINED_OFFSET, + UNDEFINED_OFFSET, + IrDeclarationOrigin.DEFINED, + IrSimpleFunctionSymbolImpl(descriptor), + visibility = visibility, + modality = Modality.ABSTRACT ) - val irFunction = IrFunctionImpl(UNDEFINED_OFFSET, UNDEFINED_OFFSET, IrDeclarationOrigin.DEFINED, bridgeDescriptor) + irFunction.createParameterDeclarations() + irClass.declarations.add(irFunction) } }