From 623e7317bb74e5fa3e592e3b89e0daf41dfda378 Mon Sep 17 00:00:00 2001 From: Svyatoslav Scherbina Date: Thu, 12 Jan 2023 18:46:01 +0100 Subject: [PATCH] K2: fix signature computation for Objective-C constructors --- .../src/org/jetbrains/kotlin/backend/konan/ObjCInterop.kt | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ObjCInterop.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ObjCInterop.kt index 7a8d8c5fd2d..caa183eda75 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ObjCInterop.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/ObjCInterop.kt @@ -12,6 +12,7 @@ import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.ir.declarations.* +import org.jetbrains.kotlin.ir.descriptors.IrBasedClassConstructorDescriptor import org.jetbrains.kotlin.ir.expressions.IrConstructorCall import org.jetbrains.kotlin.ir.types.classOrNull import org.jetbrains.kotlin.ir.types.getPublicSignature @@ -272,6 +273,12 @@ fun IrConstructor.getObjCInitMethod(): IrSimpleFunction? { } fun ConstructorDescriptor.getObjCInitMethod(): FunctionDescriptor? { + if (this is IrBasedClassConstructorDescriptor) { + // E.g. in case of K2. + // The constructedClass has empty member scope, so we have to delegate to IR to find the init method. + return this.owner.getObjCInitMethod()?.descriptor + } + return this.annotations.findAnnotation(objCConstructorFqName)?.let { val initSelector = it.getAnnotationStringValue("initSelector") val memberScope = constructedClass.unsubstitutedMemberScope