From 2bf7bbb6c13b6ff8840e89f33809ee74491301e3 Mon Sep 17 00:00:00 2001 From: Sebastian Sellmair Date: Wed, 24 Jan 2024 13:58:54 +0100 Subject: [PATCH] [ObjCExport] Support mapping of ObjCObject types to id ^KT-65167 --- .../kotlin/objcexport/translateToObjCType.kt | 8 +++++--- .../konan/tests/ObjCExportTypeTranslationTest.kt | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/native/objcexport-header-generator/impl/analysis-api/src/org/jetbrains/kotlin/objcexport/translateToObjCType.kt b/native/objcexport-header-generator/impl/analysis-api/src/org/jetbrains/kotlin/objcexport/translateToObjCType.kt index 5a2f186019f..a175b822629 100644 --- a/native/objcexport-header-generator/impl/analysis-api/src/org/jetbrains/kotlin/objcexport/translateToObjCType.kt +++ b/native/objcexport-header-generator/impl/analysis-api/src/org/jetbrains/kotlin/objcexport/translateToObjCType.kt @@ -15,6 +15,7 @@ import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.StandardClassIds import org.jetbrains.kotlin.objcexport.analysisApiUtils.getInlineTargetTypeOrNull import org.jetbrains.kotlin.objcexport.analysisApiUtils.isError +import org.jetbrains.kotlin.objcexport.analysisApiUtils.isObjCObjectType import org.jetbrains.kotlin.objcexport.analysisApiUtils.objCErrorType @@ -23,9 +24,6 @@ import org.jetbrains.kotlin.objcexport.analysisApiUtils.objCErrorType */ context(KtAnalysisSession, KtObjCExportSession) internal fun KtType.translateToObjCType(typeBridge: TypeBridge): ObjCType { - - //if (!this.isObjCObjectType()) return null //TODO implement isObjCObjectType - return when (typeBridge) { is ReferenceBridge -> this.translateToObjCReferenceType() is BlockPointerBridge -> this.translateToObjCFunctionType(typeBridge) @@ -87,6 +85,10 @@ private fun KtType.mapToReferenceTypeIgnoringNullability(): ObjCNonNullReference return ObjCIdType } + if (isObjCObjectType()) { + return ObjCIdType + } + /* Check if inline type represents 'regular' inline class */ run check@{ if (classId == null) return@check diff --git a/native/objcexport-header-generator/test/org/jetbrains/kotlin/backend/konan/tests/ObjCExportTypeTranslationTest.kt b/native/objcexport-header-generator/test/org/jetbrains/kotlin/backend/konan/tests/ObjCExportTypeTranslationTest.kt index 876b976a72f..9ea5fe8424a 100644 --- a/native/objcexport-header-generator/test/org/jetbrains/kotlin/backend/konan/tests/ObjCExportTypeTranslationTest.kt +++ b/native/objcexport-header-generator/test/org/jetbrains/kotlin/backend/konan/tests/ObjCExportTypeTranslationTest.kt @@ -457,6 +457,20 @@ class ObjCExportTypeTranslationTest( assertEquals("id -> void", header.renderTypesOfSymbol("foo")) } + @Test + fun `test - ObjCObject types`() { + val header = header( + """ + class A: kotlinx.cinterop.ObjCObject + val foo : A get() = A + val bar: kotlinx.cinterop.ObjCObject + """.trimIndent() + ) + + assertEquals("id", header.renderTypesOfSymbol("foo")) + assertEquals("id", header.renderTypesOfSymbol("bar")) + } + @Test fun `test - unresolved error type`() { val header = header(