[K/N] implement toString for ObjC spec classes
Make compiler debugging easier by giving objects meaningful names
This commit is contained in:
+43
-12
@@ -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}`"
|
||||
}
|
||||
Reference in New Issue
Block a user