From 2bd73cc44ef4d9cabae1dd33c88570d48035f05e Mon Sep 17 00:00:00 2001 From: Svyatoslav Scherbina Date: Fri, 29 Jan 2021 17:38:44 +0300 Subject: [PATCH] Consolidate type adapters generation in ObjCExportCodeGenerator --- .../objcexport/ObjCExportCodeGenerator.kt | 22 ++++++++++--------- .../backend/konan/objcexport/ObjCExport.kt | 4 +--- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/objcexport/ObjCExportCodeGenerator.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/objcexport/ObjCExportCodeGenerator.kt index c4d034eb567..2d997aa6186 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/objcexport/ObjCExportCodeGenerator.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/llvm/objcexport/ObjCExportCodeGenerator.kt @@ -229,10 +229,12 @@ internal class ObjCExportCodeGenerator( return callFromBridge(conversion.owner.llvmFunction, listOf(value), resultLifetime) } - private val objCTypeAdapters = mutableListOf() + private fun generateTypeAdapters(spec: ObjCExportCodeSpec?) { + val objCTypeAdapters = mutableListOf() - internal fun generate(spec: ObjCExportCodeSpec) { - spec.types.forEach { + objCTypeAdapters += createTypeAdapter(objCClassForAny, superClass = null) + + spec?.types?.forEach { objCTypeAdapters += when (it) { is ObjCClassForKotlinClass -> { val superClass = it.superClassNotAny ?: objCClassForAny @@ -248,13 +250,17 @@ internal class ObjCExportCodeGenerator( } } - spec.files.forEach { + spec?.files?.forEach { objCTypeAdapters += createTypeAdapterForFileClass(it) dataGenerator.emitEmptyClass(it.binaryName, namer.kotlinAnyName.binaryName) } + + emitTypeAdapters(objCTypeAdapters) } - internal fun emitRtti() { + internal fun generate(spec: ObjCExportCodeSpec?) { + generateTypeAdapters(spec) + NSNumberKind.values().mapNotNull { it.mappedKotlinClassId }.forEach { dataGenerator.exportClass(namer.numberBoxName(it).binaryName) } @@ -264,10 +270,6 @@ internal class ObjCExportCodeGenerator( emitSpecialClassesConvertions() - objCTypeAdapters += createTypeAdapter(objCClassForAny, superClass = null) - - emitTypeAdapters() - // Replace runtime global with weak linkage: replaceExternalWeakOrCommonGlobal( "Kotlin_ObjCInterop_uniquePrefix", @@ -282,7 +284,7 @@ internal class ObjCExportCodeGenerator( emitKt42254Hint() } - private fun emitTypeAdapters() { + private fun emitTypeAdapters(objCTypeAdapters: List) { val placedClassAdapters = mutableMapOf() val placedInterfaceAdapters = mutableMapOf() diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExport.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExport.kt index 0a852dd8a67..0dd2fec5767 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExport.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExport.kt @@ -96,12 +96,10 @@ internal class ObjCExport(val context: Context, symbolTable: SymbolTable) { if (exportedInterface != null) { produceFrameworkSpecific(exportedInterface.headerLines) - objCCodeGenerator.generate(codeSpec!!) - exportedInterface.generateWorkaroundForSwiftSR10177() } - objCCodeGenerator.emitRtti() + objCCodeGenerator.generate(codeSpec) objCCodeGenerator.dispose() }