[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.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}`"
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user