[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.symbols.*
import org.jetbrains.kotlin.ir.util.SymbolTable import org.jetbrains.kotlin.ir.util.SymbolTable
import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperClassNotAny import org.jetbrains.kotlin.resolve.descriptorUtil.getSuperClassNotAny
import org.jetbrains.kotlin.resolve.descriptorUtil.hasCompanionObject
internal fun ObjCExportedInterface.createCodeSpec(symbolTable: SymbolTable): ObjCExportCodeSpec { 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 files = topLevel.map { (sourceFile, declarations) ->
val binaryName = namer.getFileClassName(sourceFile).binaryName val binaryName = namer.getFileClassName(sourceFile).binaryName
val methods = declarations.toObjCMethods() val methods = declarations.toObjCMethods()
ObjCClassForKotlinFile(binaryName, methods) ObjCClassForKotlinFile(binaryName, sourceFile, methods)
} }
val classToType = mutableMapOf<ClassDescriptor, ObjCTypeForKotlinType>() 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) 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( internal class ObjCFactoryMethodForKotlinArrayConstructor(
val baseMethod: BaseMethod<IrConstructorSymbol> val baseMethod: BaseMethod<IrConstructorSymbol>
) : ObjCMethodSpec() ) : ObjCMethodSpec() {
override fun toString(): String =
"ObjC spec of factory ${baseMethod.selector} for ${baseMethod.symbol}"
}
internal class ObjCGetterForKotlinEnumEntry( internal class ObjCGetterForKotlinEnumEntry(
val irEnumEntrySymbol: IrEnumEntrySymbol, val irEnumEntrySymbol: IrEnumEntrySymbol,
val selector: String val selector: String
) : ObjCMethodSpec() ) : ObjCMethodSpec() {
override fun toString(): String =
"ObjC spec of getter `$selector` for `$irEnumEntrySymbol`"
}
internal class ObjCClassMethodForKotlinEnumValues( internal class ObjCClassMethodForKotlinEnumValues(
val valuesFunctionSymbol: IrFunctionSymbol, val valuesFunctionSymbol: IrFunctionSymbol,
val selector: String 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) internal sealed class ObjCTypeSpec(val binaryName: String)
@@ -177,15 +197,26 @@ internal class ObjCClassForKotlinClass(
methods: List<ObjCMethodSpec>, methods: List<ObjCMethodSpec>,
val categoryMethods: List<ObjCMethodForKotlinMethod>, val categoryMethods: List<ObjCMethodForKotlinMethod>,
val superClassNotAny: ObjCClassForKotlinClass? 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( internal class ObjCProtocolForKotlinInterface(
binaryName: String, binaryName: String,
irClassSymbol: IrClassSymbol, irClassSymbol: IrClassSymbol,
methods: List<ObjCMethodSpec> 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( internal class ObjCClassForKotlinFile(
binaryName: String, binaryName: String,
private val sourceFile: SourceFile,
val methods: List<ObjCMethodForKotlinMethod> val methods: List<ObjCMethodForKotlinMethod>
) : ObjCTypeSpec(binaryName) ) : ObjCTypeSpec(binaryName) {
override fun toString(): String =
"ObjC spec of class `$binaryName` for `${sourceFile.name}`"
}