Drop more usages of IrDeclaration.descriptor from ObjCExportCodeGenerator

This commit is contained in:
Svyatoslav Scherbina
2021-01-28 20:52:35 +03:00
committed by Vasily Levchenko
parent 4080a852e1
commit 8519be28b4
2 changed files with 16 additions and 10 deletions
@@ -62,7 +62,7 @@ internal class BuiltInFictitiousFunctionIrClassFactory(
// builtClasses.forEach { it.addFakeOverrides() }
}
class FunctionalInterface(val irClass: IrClass, val arity: Int)
class FunctionalInterface(val irClass: IrClass, val descriptor: FunctionClassDescriptor, val arity: Int)
fun buildAllClasses() {
val maxArity = 255 // See [BuiltInFictitiousFunctionClassFactory].
@@ -112,10 +112,10 @@ internal class BuiltInFictitiousFunctionIrClassFactory(
val builtClasses get() = builtClassesMap.values
val builtFunctionNClasses get() = builtClassesMap.values.mapNotNull {
with(it.descriptor as FunctionClassDescriptor) {
val builtFunctionNClasses get() = builtClassesMap.entries.mapNotNull { (descriptor, irClass) ->
with(descriptor) {
if (functionKind == FunctionClassKind.Function)
FunctionalInterface(it, arity)
FunctionalInterface(irClass, descriptor, arity)
else null
}
}
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.backend.konan.serialization.resolveFakeOverrideMaybe
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.konan.CompiledKlibModuleOrigin
import org.jetbrains.kotlin.descriptors.konan.CurrentKlibModuleOrigin
import org.jetbrains.kotlin.incremental.components.NoLookupLocation
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.expressions.IrClassReference
import org.jetbrains.kotlin.ir.expressions.IrVararg
@@ -372,10 +373,15 @@ internal class ObjCExportCodeGenerator(
private val objCClassForAny = ObjCClassForKotlinClass(
namer.kotlinAnyName.binaryName,
symbols.any,
methods = listOf("equals", "hashCode", "toString").map { name ->
symbols.any.owner.simpleFunctions().single { it.name == Name.identifier(name) }
}.map {
val baseMethod = createObjCMethodSpecBaseMethod(mapper, namer, it.symbol, it.descriptor)
methods = listOf("equals", "hashCode", "toString").map { nameString ->
val name = Name.identifier(nameString)
val irFunction = symbols.any.owner.simpleFunctions().single { it.name == name }
val descriptor = context.builtIns.any.unsubstitutedMemberScope
.getContributedFunctions(name, NoLookupLocation.FROM_BACKEND).single()
val baseMethod = createObjCMethodSpecBaseMethod(mapper, namer, irFunction.symbol, descriptor)
ObjCMethodForKotlinMethod(baseMethod)
},
categoryMethods = emptyList(),
@@ -631,7 +637,7 @@ private fun ObjCExportCodeGenerator.generateContinuationToCompletionConverter(
private val ObjCExportBlockCodeGenerator.mappedFunctionNClasses get() =
context.ir.symbols.functionIrClassFactory.builtFunctionNClasses
.filter { it.irClass.descriptor.isMappedFunctionClass() }
.filter { it.descriptor.isMappedFunctionClass() }
private fun ObjCExportBlockCodeGenerator.emitFunctionConverters() {
require(context.producedLlvmModuleContainsStdlib)
@@ -1428,7 +1434,7 @@ private fun ObjCExportCodeGenerator.createDirectAdapters(
private fun findImplementation(irClass: IrClass, method: IrSimpleFunction, context: Context): IrSimpleFunction? {
val override = irClass.simpleFunctions().singleOrNull {
method in it.allOverriddenFunctions
} ?: error("no implementation for ${method.descriptor}\nin ${irClass.descriptor}")
} ?: error("no implementation for ${method.render()}\nin ${irClass.fqNameWhenAvailable}")
return OverriddenFunctionInfo(override, method).getImplementation(context)
}