[K/N] implement toString for ObjC spec classes

Make compiler debugging easier by giving objects meaningful names
This commit is contained in:
Sergey Bogolepov
2022-07-04 13:37:33 +03:00
committed by Space
parent 70e15b281c
commit 3409519f0c
@@ -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<ClassDescriptor, ObjCTypeForKotlinType>()
@@ -141,27 +140,48 @@ internal sealed class ObjCMethodSpec {
data class BaseMethod<out S : IrFunctionSymbol>(val symbol: S, val bridge: MethodBridge, val selector: String)
}
internal class ObjCMethodForKotlinMethod(val baseMethod: BaseMethod<IrSimpleFunctionSymbol>) : ObjCMethodSpec()
internal class ObjCMethodForKotlinMethod(val baseMethod: BaseMethod<IrSimpleFunctionSymbol>) : ObjCMethodSpec() {
override fun toString(): String =
"ObjC spec of method `${baseMethod.selector}` for `${baseMethod.symbol}`"
}
internal class ObjCInitMethodForKotlinConstructor(val baseMethod: BaseMethod<IrConstructorSymbol>) : ObjCMethodSpec()
internal class ObjCInitMethodForKotlinConstructor(val baseMethod: BaseMethod<IrConstructorSymbol>) : ObjCMethodSpec() {
override fun toString(): String =
"ObjC spec of method `${baseMethod.selector}` for `${baseMethod.symbol}`"
}
internal class ObjCFactoryMethodForKotlinArrayConstructor(
val baseMethod: BaseMethod<IrConstructorSymbol>
) : 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<ObjCMethodSpec>,
val categoryMethods: List<ObjCMethodForKotlinMethod>,
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<ObjCMethodSpec>
) : 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<ObjCMethodForKotlinMethod>
) : ObjCTypeSpec(binaryName)
) : ObjCTypeSpec(binaryName) {
override fun toString(): String =
"ObjC spec of class `$binaryName` for `${sourceFile.name}`"
}