Consolidate type adapters generation in ObjCExportCodeGenerator

This commit is contained in:
Svyatoslav Scherbina
2021-01-29 17:38:44 +03:00
committed by Vasily Levchenko
parent 8519be28b4
commit 2bd73cc44e
2 changed files with 13 additions and 13 deletions
@@ -229,10 +229,12 @@ internal class ObjCExportCodeGenerator(
return callFromBridge(conversion.owner.llvmFunction, listOf(value), resultLifetime)
}
private val objCTypeAdapters = mutableListOf<ObjCTypeAdapter>()
private fun generateTypeAdapters(spec: ObjCExportCodeSpec?) {
val objCTypeAdapters = mutableListOf<ObjCTypeAdapter>()
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<ObjCTypeAdapter>) {
val placedClassAdapters = mutableMapOf<String, ConstPointer>()
val placedInterfaceAdapters = mutableMapOf<String, ConstPointer>()
@@ -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()
}