From 3409519f0c2fb106705f92c83d71084ad5ead4a9 Mon Sep 17 00:00:00 2001 From: Sergey Bogolepov Date: Mon, 4 Jul 2022 13:37:33 +0300 Subject: [PATCH] [K/N] implement toString for ObjC spec classes Make compiler debugging easier by giving objects meaningful names --- .../konan/objcexport/ObjCExportCodeSpec.kt | 55 +++++++++++++++---- 1 file changed, 43 insertions(+), 12 deletions(-) diff --git a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExportCodeSpec.kt b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExportCodeSpec.kt index acb334b5098..ac3a8b9dc81 100644 --- a/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExportCodeSpec.kt +++ b/kotlin-native/backend.native/compiler/ir/backend.native/src/org/jetbrains/kotlin/backend/konan/objcexport/ObjCExportCodeSpec.kt @@ -14,7 +14,6 @@ import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.ir.symbols.* import org.jetbrains.kotlin.ir.util.SymbolTable import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperClassNotAny -import org.jetbrains.kotlin.resolve.descriptorUtil.hasCompanionObject internal fun ObjCExportedInterface.createCodeSpec(symbolTable: SymbolTable): ObjCExportCodeSpec { @@ -43,7 +42,7 @@ internal fun ObjCExportedInterface.createCodeSpec(symbolTable: SymbolTable): Obj val files = topLevel.map { (sourceFile, declarations) -> val binaryName = namer.getFileClassName(sourceFile).binaryName val methods = declarations.toObjCMethods() - ObjCClassForKotlinFile(binaryName, methods) + ObjCClassForKotlinFile(binaryName, sourceFile, methods) } val classToType = mutableMapOf() @@ -141,27 +140,48 @@ internal sealed class ObjCMethodSpec { data class BaseMethod(val symbol: S, val bridge: MethodBridge, val selector: String) } -internal class ObjCMethodForKotlinMethod(val baseMethod: BaseMethod) : ObjCMethodSpec() +internal class ObjCMethodForKotlinMethod(val baseMethod: BaseMethod) : ObjCMethodSpec() { + override fun toString(): String = + "ObjC spec of method `${baseMethod.selector}` for `${baseMethod.symbol}`" +} -internal class ObjCInitMethodForKotlinConstructor(val baseMethod: BaseMethod) : ObjCMethodSpec() +internal class ObjCInitMethodForKotlinConstructor(val baseMethod: BaseMethod) : ObjCMethodSpec() { + override fun toString(): String = + "ObjC spec of method `${baseMethod.selector}` for `${baseMethod.symbol}`" +} internal class ObjCFactoryMethodForKotlinArrayConstructor( val baseMethod: BaseMethod -) : ObjCMethodSpec() +) : ObjCMethodSpec() { + override fun toString(): String = + "ObjC spec of factory ${baseMethod.selector} for ${baseMethod.symbol}" +} internal class ObjCGetterForKotlinEnumEntry( val irEnumEntrySymbol: IrEnumEntrySymbol, val selector: String -) : ObjCMethodSpec() +) : ObjCMethodSpec() { + override fun toString(): String = + "ObjC spec of getter `$selector` for `$irEnumEntrySymbol`" +} internal class ObjCClassMethodForKotlinEnumValues( val valuesFunctionSymbol: IrFunctionSymbol, val selector: String -) : ObjCMethodSpec() +) : ObjCMethodSpec() { + override fun toString(): String = + "ObjC spec of method `$selector` for $valuesFunctionSymbol" +} -internal class ObjCGetterForObjectInstance(val selector: String, val classSymbol: IrClassSymbol) : ObjCMethodSpec() +internal class ObjCGetterForObjectInstance(val selector: String, val classSymbol: IrClassSymbol) : ObjCMethodSpec() { + override fun toString(): String = + "ObjC spec of instance getter `$selector` for $classSymbol" +} -internal object ObjCKotlinThrowableAsErrorMethod : ObjCMethodSpec() +internal object ObjCKotlinThrowableAsErrorMethod : ObjCMethodSpec() { + override fun toString(): String = + "ObjC spec for ThrowableAsError method" +} internal sealed class ObjCTypeSpec(val binaryName: String) @@ -177,15 +197,26 @@ internal class ObjCClassForKotlinClass( methods: List, val categoryMethods: List, val superClassNotAny: ObjCClassForKotlinClass? -) : ObjCTypeForKotlinType(binaryName, irClassSymbol, methods) +) : ObjCTypeForKotlinType(binaryName, irClassSymbol, methods) { + override fun toString(): String = + "ObjC spec of class `$binaryName` for `$irClassSymbol`" +} internal class ObjCProtocolForKotlinInterface( binaryName: String, irClassSymbol: IrClassSymbol, methods: List -) : ObjCTypeForKotlinType(binaryName, irClassSymbol, methods) +) : ObjCTypeForKotlinType(binaryName, irClassSymbol, methods) { + + override fun toString(): String = + "ObjC spec of protocol `$binaryName` for `$irClassSymbol`" +} internal class ObjCClassForKotlinFile( binaryName: String, + private val sourceFile: SourceFile, val methods: List -) : ObjCTypeSpec(binaryName) \ No newline at end of file +) : ObjCTypeSpec(binaryName) { + override fun toString(): String = + "ObjC spec of class `$binaryName` for `${sourceFile.name}`" +} \ No newline at end of file