[IR] Remove descriptor-related methods from SymbolTable

Replace them with calls to SymbolTableExtension
This commit is contained in:
Dmitriy Novozhilov
2023-07-11 12:17:59 +03:00
committed by Space Team
parent b886b7488d
commit 8ad202eb8b
55 changed files with 349 additions and 675 deletions
@@ -51,7 +51,7 @@ internal class LazyIrFunctionFactory(
override fun getDeclaration(symbol: IrSymbol) =
(symbol.descriptor as? FunctionClassDescriptor)?.let { descriptor ->
buildClass(descriptor) {
declareClass(descriptor) {
descriptorExtension.declareClass(descriptor) {
createIrClass(descriptor)
}
}
@@ -103,7 +103,7 @@ internal class BuiltInFictitiousFunctionIrClassFactory(
override fun getDeclaration(symbol: IrSymbol) =
(symbol.descriptor as? FunctionClassDescriptor)?.let { descriptor ->
buildClass(descriptor) {
declareClass(descriptor) {
descriptorExtension.declareClass(descriptor) {
createIrClass(it, descriptor)
}
}
@@ -124,7 +124,7 @@ internal class BuiltInFictitiousFunctionIrClassFactory(
fun buildAllClasses() {
val maxArity = 255 // See [BuiltInFictitiousFunctionClassFactory].
(0 .. maxArity).forEach { arity ->
(0..maxArity).forEach { arity ->
functionN(arity)
kFunctionN(arity)
suspendFunctionN(arity)
@@ -156,13 +156,11 @@ internal class BuiltInFictitiousFunctionIrClassFactory(
override fun kSuspendFunctionN(arity: Int, declarator: SymbolTable.((IrClassSymbol) -> IrClass) -> IrClass): IrClass =
buildClass(reflectionTypes.getKSuspendFunction(arity) as FunctionClassDescriptor, declarator)
private val functionSymbol = symbolTable.referenceClass(
irBuiltIns.builtIns.builtInsModule.findClassAcrossModuleDependencies(
ClassId.topLevel(KonanFqNames.function))!!)
private val functionSymbol = symbolTable.descriptorExtension.referenceClass(irBuiltIns.builtIns.builtInsModule.findClassAcrossModuleDependencies(
ClassId.topLevel(KonanFqNames.function))!!)
private val kFunctionSymbol = symbolTable.referenceClass(
irBuiltIns.builtIns.builtInsModule.findClassAcrossModuleDependencies(
ClassId.topLevel(KonanFqNames.kFunction))!!)
private val kFunctionSymbol = symbolTable.descriptorExtension.referenceClass(irBuiltIns.builtIns.builtInsModule.findClassAcrossModuleDependencies(
ClassId.topLevel(KonanFqNames.kFunction))!!)
private val filesMap = mutableMapOf<PackageFragmentDescriptor, IrFile>()
@@ -179,8 +177,7 @@ internal class BuiltInFictitiousFunctionIrClassFactory(
}
private fun createTypeParameter(descriptor: TypeParameterDescriptor): IrTypeParameter =
symbolTable.declareGlobalTypeParameter(
SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, DECLARATION_ORIGIN_FUNCTION_CLASS,
symbolTable.descriptorExtension.declareGlobalTypeParameter(SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, DECLARATION_ORIGIN_FUNCTION_CLASS,
descriptor
)
@@ -198,7 +195,7 @@ internal class BuiltInFictitiousFunctionIrClassFactory(
)
}
}
return symbolTable.declareSimpleFunction(descriptor, functionFactory)
return symbolTable.descriptorExtension.declareSimpleFunction(descriptor, functionFactory)
}
private fun createIrClass(symbol: IrClassSymbol, descriptor: ClassDescriptor): IrClass =
@@ -228,7 +225,7 @@ internal class BuiltInFictitiousFunctionIrClassFactory(
}
val superTypeSymbol = when (val superTypeDescriptor = superType.constructor.declarationDescriptor) {
is FunctionClassDescriptor -> buildClass(superTypeDescriptor) {
declareClass(superTypeDescriptor) {
descriptorExtension.declareClass(superTypeDescriptor) {
createIrClass(it, superTypeDescriptor)
}
}.symbol
@@ -341,10 +338,10 @@ internal class BuiltInFictitiousFunctionIrClassFactory(
}
}
val newFunction = symbolTable.declareSimpleFunction(descriptor, functionDeclare)
val newFunction = symbolTable.descriptorExtension.declareSimpleFunction(descriptor, functionDeclare)
newFunction.parent = this
newFunction.overriddenSymbols = descriptor.overriddenDescriptors.mapNotNull { symbolTable.referenceSimpleFunction(it.original) }
newFunction.overriddenSymbols = descriptor.overriddenDescriptors.mapNotNull { symbolTable.descriptorExtension.referenceSimpleFunction(it.original) }
newFunction.dispatchReceiverParameter = descriptor.dispatchReceiverParameter?.let { newFunction.createValueParameter(it) }
newFunction.extensionReceiverParameter = descriptor.extensionReceiverParameter?.let { newFunction.createValueParameter(it) }
newFunction.valueParameters = descriptor.valueParameters.map { newFunction.createValueParameter(it) }
@@ -371,7 +368,7 @@ internal class BuiltInFictitiousFunctionIrClassFactory(
isExpect = descriptor.isExpect,
isFakeOverride = true)
}
val property = symbolTable.declareProperty(descriptor, propertyFactory = propertyDeclare)
val property = symbolTable.descriptorExtension.declareProperty(descriptor, propertyFactory = propertyDeclare)
property.parent = this
property.getter = descriptor.getter?.let { g -> createFakeOverrideFunction(g, property.symbol) }
@@ -10,7 +10,6 @@ import org.jetbrains.kotlin.backend.common.pop
import org.jetbrains.kotlin.backend.common.push
import org.jetbrains.kotlin.backend.konan.*
import org.jetbrains.kotlin.backend.konan.driver.phases.PsiToIrContext
import org.jetbrains.kotlin.config.CommonConfigurationKeys.USE_FIR
import org.jetbrains.kotlin.config.CompilerConfiguration
import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.descriptors.annotations.AnnotationDescriptor
@@ -160,8 +159,8 @@ internal class ExportedElement(
val irSymbol = when {
isFunction -> owner.symbolTable.referenceFunction(declaration as FunctionDescriptor)
isClass -> owner.symbolTable.referenceClass(declaration as ClassDescriptor)
isEnumEntry -> owner.symbolTable.referenceEnumEntry(declaration as ClassDescriptor)
isClass -> owner.symbolTable.descriptorExtension.referenceClass(declaration as ClassDescriptor)
isEnumEntry -> owner.symbolTable.descriptorExtension.referenceEnumEntry(declaration as ClassDescriptor)
else -> error("unexpected $kind element: $declaration")
}
@@ -507,18 +507,18 @@ internal class SymbolOverDescriptorsLookupUtils(val symbolTable: SymbolTable) :
// inspired by: irBuiltIns.findBuiltInClassMemberFunctions(this, name).singleOrNull()
clazz.descriptor.unsubstitutedMemberScope.getContributedFunctions(name, NoLookupLocation.FROM_BACKEND)
.singleOrNull()
?.let { symbolTable.referenceSimpleFunction(it) }
?.let { symbolTable.descriptorExtension.referenceSimpleFunction(it) }
override fun findMemberProperty(clazz: IrClassSymbol, name: Name): IrPropertySymbol? =
clazz.descriptor.unsubstitutedMemberScope.getContributedVariables(name, NoLookupLocation.FROM_BACKEND)
.singleOrNull()
?.let { symbolTable.referenceProperty(it) }
?.let { symbolTable.descriptorExtension.referenceProperty(it) }
override fun findMemberPropertyGetter(clazz: IrClassSymbol, name: Name): IrSimpleFunctionSymbol? =
clazz.descriptor.unsubstitutedMemberScope.getContributedVariables(name, NoLookupLocation.FROM_BACKEND)
.singleOrNull()
?.getter
?.let { symbolTable.referenceSimpleFunction(it) }
?.let { symbolTable.descriptorExtension.referenceSimpleFunction(it) }
override fun getName(clazz: IrClassSymbol) = clazz.descriptor.name
override fun isExtensionReceiverClass(property: IrPropertySymbol, expected: IrClassSymbol?): Boolean {
@@ -529,7 +529,7 @@ internal class SymbolOverDescriptorsLookupUtils(val symbolTable: SymbolTable) :
return function.descriptor.extensionReceiverParameter?.type?.let { TypeUtils.getClassDescriptor(it) } == expected?.descriptor
}
override fun findGetter(property: IrPropertySymbol): IrSimpleFunctionSymbol = symbolTable.referenceSimpleFunction(property.descriptor.getter!!)
override fun findGetter(property: IrPropertySymbol): IrSimpleFunctionSymbol = symbolTable.descriptorExtension.referenceSimpleFunction(property.descriptor.getter!!)
override fun isExtensionReceiverNullable(function: IrFunctionSymbol): Boolean? {
return function.descriptor.extensionReceiverParameter?.type?.isMarkedNullable
@@ -570,13 +570,13 @@ internal class SymbolOverDescriptorsLookupUtils(val symbolTable: SymbolTable) :
override fun isSuspend(functionSymbol: IrFunctionSymbol): Boolean = functionSymbol.descriptor.isSuspend
override fun getVisibility(function: IrFunctionSymbol): DescriptorVisibility = function.descriptor.visibility
override fun findPrimaryConstructor(clazz: IrClassSymbol) = clazz.descriptor.unsubstitutedPrimaryConstructor?.let { symbolTable.referenceConstructor(it) }
override fun findNoParametersConstructor(clazz: IrClassSymbol) = clazz.descriptor.constructors.singleOrNull { it.valueParameters.size == 0 }?.let { symbolTable.referenceConstructor(it) }
override fun findPrimaryConstructor(clazz: IrClassSymbol) = clazz.descriptor.unsubstitutedPrimaryConstructor?.let { symbolTable.descriptorExtension.referenceConstructor(it) }
override fun findNoParametersConstructor(clazz: IrClassSymbol) = clazz.descriptor.constructors.singleOrNull { it.valueParameters.size == 0 }?.let { symbolTable.descriptorExtension.referenceConstructor(it) }
override fun findNestedClass(clazz: IrClassSymbol, name: Name): IrClassSymbol? {
val classDescriptor = clazz.descriptor.defaultType.memberScope.getContributedClassifier(name, NoLookupLocation.FROM_BUILTINS) as? ClassDescriptor
return classDescriptor?.let {
symbolTable.referenceClass(it)
symbolTable.descriptorExtension.referenceClass(it)
}
}
@@ -15,6 +15,7 @@ import org.jetbrains.kotlin.ir.declarations.impl.IrConstructorImpl
import org.jetbrains.kotlin.ir.expressions.IrExpression
import org.jetbrains.kotlin.ir.expressions.impl.IrInstanceInitializerCallImpl
import org.jetbrains.kotlin.ir.symbols.IrClassSymbol
import org.jetbrains.kotlin.ir.symbols.IrConstructorSymbol
import org.jetbrains.kotlin.ir.symbols.IrSymbol
import org.jetbrains.kotlin.ir.types.impl.IrUninitializedType
import org.jetbrains.kotlin.ir.util.*
@@ -54,7 +55,7 @@ internal interface DescriptorToIrTranslationMixin {
* Additional elements are passed via [builder] callback.
*/
fun createClass(descriptor: ClassDescriptor, builder: (IrClass) -> Unit): IrClass =
symbolTable.declareClass(descriptor) {
symbolTable.descriptorExtension.declareClass(descriptor) {
symbolTable.irFactory.createIrClassFromDescriptor(
SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB, it, descriptor
)
@@ -85,7 +86,7 @@ internal interface DescriptorToIrTranslationMixin {
}
fun createConstructor(constructorDescriptor: ClassConstructorDescriptor): IrConstructor {
val irConstructor = symbolTable.declareConstructor(constructorDescriptor) {
val irConstructor = symbolTable.descriptorExtension.declareConstructor(constructorDescriptor) {
with(constructorDescriptor) {
IrConstructorImpl(
SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB, it, name, visibility,
@@ -107,7 +108,7 @@ internal interface DescriptorToIrTranslationMixin {
}
fun createProperty(propertyDescriptor: PropertyDescriptor): IrProperty {
val irProperty = symbolTable.declareProperty(SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB, propertyDescriptor)
val irProperty = symbolTable.descriptorExtension.declareProperty(SYNTHETIC_OFFSET, SYNTHETIC_OFFSET, IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB, propertyDescriptor, propertyDescriptor.isDelegated)
irProperty.getter = propertyDescriptor.getter?.let {
val irGetter = createFunction(it)
irGetter.correspondingPropertySymbol = irProperty.symbol
@@ -63,7 +63,7 @@ internal class IrProviderForCEnumAndCStructStubs(
.flatMap { it.getMemberScope().getContributedDescriptors(DescriptorKindFilter.CLASSIFIERS) }
.filterIsInstance<ClassDescriptor>()
.filter { it.implementsCEnum() || it.inheritsFromCStructVar() }
.forEach { symbolTable.referenceClass(it) }
.forEach { symbolTable.descriptorExtension.referenceClass(it) }
private fun generateIrIfNeeded(symbol: IrSymbol, file: IrFile) {
// TODO: These `findOrGenerate` calls generate a whole subtree.
@@ -92,23 +92,23 @@ internal class IrProviderForCEnumAndCStructStubs(
fun getDeclaration(descriptor: DeclarationDescriptor, idSignature: IdSignature, file: IrFile, symbolKind: BinarySymbolData.SymbolKind): IrSymbolOwner {
return symbolTable.run {
when (symbolKind) {
BinarySymbolData.SymbolKind.CONSTRUCTOR_SYMBOL -> declareConstructorFromLinker(descriptor as ClassConstructorDescriptor, idSignature) { s ->
BinarySymbolData.SymbolKind.CONSTRUCTOR_SYMBOL -> descriptorExtension.declareConstructorFromLinker(descriptor as ClassConstructorDescriptor, idSignature) { s: IrConstructorSymbol ->
generateIrIfNeeded(s, file)
s.owner
}
BinarySymbolData.SymbolKind.CLASS_SYMBOL -> declareClassFromLinker(descriptor as ClassDescriptor, idSignature) { s ->
BinarySymbolData.SymbolKind.CLASS_SYMBOL -> descriptorExtension.declareClassFromLinker(descriptor as ClassDescriptor, idSignature) { s ->
generateIrIfNeeded(s, file)
s.owner
}
BinarySymbolData.SymbolKind.ENUM_ENTRY_SYMBOL -> declareEnumEntryFromLinker(descriptor as ClassDescriptor, idSignature) { s ->
BinarySymbolData.SymbolKind.ENUM_ENTRY_SYMBOL -> descriptorExtension.declareEnumEntryFromLinker(descriptor as ClassDescriptor, idSignature) { s: IrEnumEntrySymbol ->
generateIrIfNeeded(s, file)
s.owner
}
BinarySymbolData.SymbolKind.FUNCTION_SYMBOL -> declareSimpleFunctionFromLinker(descriptor as FunctionDescriptor, idSignature) { s ->
BinarySymbolData.SymbolKind.FUNCTION_SYMBOL -> descriptorExtension.declareSimpleFunctionFromLinker(descriptor as FunctionDescriptor, idSignature) { s: IrSimpleFunctionSymbol ->
generateIrIfNeeded(s, file)
s.owner
}
BinarySymbolData.SymbolKind.PROPERTY_SYMBOL -> declarePropertyFromLinker(descriptor as PropertyDescriptor, idSignature) { s ->
BinarySymbolData.SymbolKind.PROPERTY_SYMBOL -> descriptorExtension.declarePropertyFromLinker(descriptor as PropertyDescriptor, idSignature) { s: IrPropertySymbol ->
generateIrIfNeeded(s, file)
s.owner
}
@@ -121,4 +121,4 @@ internal class IrProviderForCEnumAndCStructStubs(
companion object {
const val cTypeDefinitionsFileName = "CTypeDefinitions"
}
}
}
@@ -60,7 +60,7 @@ internal class CEnumClassGenerator(
* Generates one if absent.
*/
fun findOrGenerateCEnum(classDescriptor: ClassDescriptor, parent: IrDeclarationContainer): IrClass {
val irClassSymbol = symbolTable.referenceClass(classDescriptor)
val irClassSymbol = symbolTable.descriptorExtension.referenceClass(classDescriptor)
return if (!irClassSymbol.isBound) {
provideIrClassForCEnum(classDescriptor).also {
it.patchDeclarationParents(parent)
@@ -123,11 +123,10 @@ internal class CEnumClassGenerator(
}
private fun createEnumEntry(enumDescriptor: ClassDescriptor, entryDescriptor: ClassDescriptor): IrEnumEntry {
val enumEntry = symbolTable.declareEnumEntry(
SYNTHETIC_OFFSET, SYNTHETIC_OFFSET,
val enumEntry = symbolTable.descriptorExtension.declareEnumEntry(SYNTHETIC_OFFSET, SYNTHETIC_OFFSET,
IrDeclarationOrigin.IR_EXTERNAL_DECLARATION_STUB, entryDescriptor
)
val constructorSymbol = symbolTable.referenceConstructor(enumDescriptor.unsubstitutedPrimaryConstructor!!)
val constructorSymbol = symbolTable.descriptorExtension.referenceConstructor(enumDescriptor.unsubstitutedPrimaryConstructor!!)
postLinkageSteps.add {
enumEntry.initializerExpression = IrExpressionBodyImpl(IrEnumConstructorCallImpl(
SYNTHETIC_OFFSET, SYNTHETIC_OFFSET,
@@ -158,8 +157,8 @@ internal class CEnumClassGenerator(
val irConstructor = createConstructor(descriptor.unsubstitutedPrimaryConstructor!!)
val builtIns = (irBuiltIns as IrBuiltInsOverDescriptors).builtIns
val enumConstructor = builtIns.enum.constructors.single()
val constructorSymbol = symbolTable.referenceConstructor(enumConstructor)
val classSymbol = symbolTable.referenceClass(descriptor)
val constructorSymbol = symbolTable.descriptorExtension.referenceConstructor(enumConstructor)
val classSymbol = symbolTable.descriptorExtension.referenceClass(descriptor)
val type = descriptor.defaultType.toIrType()
postLinkageSteps.add {
irConstructor.body = irBuilder(irBuiltIns, irConstructor.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET)
@@ -52,8 +52,8 @@ internal class CEnumCompanionGenerator(
private fun createCompanionConstructor(companionObjectDescriptor: ClassDescriptor): IrConstructor {
val anyPrimaryConstructor = companionObjectDescriptor.builtIns.any.unsubstitutedPrimaryConstructor!!
val superConstructorSymbol = symbolTable.referenceConstructor(anyPrimaryConstructor)
val classSymbol = symbolTable.referenceClass(companionObjectDescriptor)
val superConstructorSymbol = symbolTable.descriptorExtension.referenceConstructor(anyPrimaryConstructor)
val classSymbol = symbolTable.descriptorExtension.referenceClass(companionObjectDescriptor)
return createConstructor(companionObjectDescriptor.unsubstitutedPrimaryConstructor!!).also {
postLinkageSteps.add {
it.body = irBuilder(irBuiltIns, it.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody {
@@ -99,4 +99,4 @@ internal class CEnumCompanionGenerator(
}
}
}
}
}
@@ -59,11 +59,11 @@ internal class CEnumVarClassGenerator(
private fun createPrimaryConstructor(enumVarClass: IrClass): IrConstructor {
val irConstructor = createConstructor(enumVarClass.descriptor.unsubstitutedPrimaryConstructor!!)
val classSymbol = symbolTable.referenceClass(enumVarClass.descriptor)
val classSymbol = symbolTable.descriptorExtension.referenceClass(enumVarClass.descriptor)
postLinkageSteps.add {
irConstructor.body = irBuilder(irBuiltIns, irConstructor.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody {
+IrDelegatingConstructorCallImpl.fromSymbolOwner(
startOffset, endOffset, context.irBuiltIns.unitType, symbols.enumVarConstructorSymbol
startOffset, endOffset, context.irBuiltIns.unitType, symbols.enumVarConstructorSymbol
).also {
it.putValueArgument(0, irGet(irConstructor.valueParameters[0]))
}
@@ -82,13 +82,13 @@ internal class CEnumVarClassGenerator(
}
private fun createCompanionConstructor(companionObjectDescriptor: ClassDescriptor, typeSize: Int): IrConstructor {
val classSymbol = symbolTable.referenceClass(companionObjectDescriptor)
val classSymbol = symbolTable.descriptorExtension.referenceClass(companionObjectDescriptor)
return createConstructor(companionObjectDescriptor.unsubstitutedPrimaryConstructor!!).also {
postLinkageSteps.add {
it.body = irBuilder(irBuiltIns, it.symbol, SYNTHETIC_OFFSET, SYNTHETIC_OFFSET).irBlockBody {
+IrDelegatingConstructorCallImpl.fromSymbolOwner(
startOffset, endOffset, context.irBuiltIns.unitType,
symbols.primitiveVarPrimaryConstructor
startOffset, endOffset, context.irBuiltIns.unitType,
symbols.primitiveVarPrimaryConstructor
).also {
it.putValueArgument(0, irInt(typeSize))
}
@@ -41,7 +41,7 @@ internal class CStructVarClassGenerator(
override val postLinkageSteps: MutableList<() -> Unit> = mutableListOf()
fun findOrGenerateCStruct(classDescriptor: ClassDescriptor, parent: IrDeclarationContainer): IrClass {
val irClassSymbol = symbolTable.referenceClass(classDescriptor)
val irClassSymbol = symbolTable.descriptorExtension.referenceClass(classDescriptor)
return if (!irClassSymbol.isBound) {
provideIrClassForCStruct(classDescriptor).also {
it.patchDeclarationParents(parent)
@@ -275,7 +275,7 @@ internal class CStructVarClassGenerator(
).also {
it.putValueArgument(0, irGet(irConstructor.valueParameters[0]))
}
+irInstanceInitializer(symbolTable.referenceClass(irClass.descriptor))
+irInstanceInitializer(symbolTable.descriptorExtension.referenceClass(irClass.descriptor))
}
}
}
@@ -290,7 +290,7 @@ internal class CStructVarClassGenerator(
it.putTypeArgument(0, irConstructor.valueParameters[0].type)
it.putValueArgument(0, irGet(irConstructor.valueParameters[0]))
}
+irInstanceInitializer(symbolTable.referenceClass(irClass.descriptor))
+irInstanceInitializer(symbolTable.descriptorExtension.referenceClass(irClass.descriptor))
}
}
}
@@ -73,7 +73,7 @@ internal class CStructVarCompanionGenerator(
startOffset, endOffset, context.irBuiltIns.unitType,
irBuiltIns.anyClass.owner.primaryConstructor!!.symbol
)
+irInstanceInitializer(symbolTable.referenceClass(companionObjectDescriptor))
+irInstanceInitializer(symbolTable.descriptorExtension.referenceClass(companionObjectDescriptor))
}
}
}
@@ -88,10 +88,10 @@ internal class CStructVarCompanionGenerator(
it.putValueArgument(0, irLong(size))
it.putValueArgument(1, irInt(align))
}
+irInstanceInitializer(symbolTable.referenceClass(companionObjectDescriptor))
+irInstanceInitializer(symbolTable.descriptorExtension.referenceClass(companionObjectDescriptor))
}
}
}
}
}
}
}
@@ -24,7 +24,7 @@ internal fun ObjCExportedInterface.createCodeSpec(symbolTable: SymbolTable): Obj
createObjCMethodSpecBaseMethod(
mapper,
namer,
symbolTable.referenceSimpleFunction(it),
symbolTable.descriptorExtension.referenceSimpleFunction(it),
it
)
)
@@ -58,13 +58,13 @@ internal fun ObjCExportedInterface.createCodeSpec(symbolTable: SymbolTable): Obj
methods += createObjCMethods(allBaseMethods)
val binaryName = namer.getClassOrProtocolName(descriptor).binaryName
val irClassSymbol = symbolTable.referenceClass(descriptor)
val irClassSymbol = symbolTable.descriptorExtension.referenceClass(descriptor)
if (descriptor.isInterface) {
ObjCProtocolForKotlinInterface(binaryName, irClassSymbol, methods)
} else {
descriptor.constructors.filter { mapper.shouldBeExposed(it) }.mapTo(methods) {
val irConstructorSymbol = symbolTable.referenceConstructor(it)
val irConstructorSymbol = symbolTable.descriptorExtension.referenceConstructor(it)
val baseMethod = createObjCMethodSpecBaseMethod(mapper, namer, irConstructorSymbol, it)
if (descriptor.isArray) {
@@ -80,24 +80,26 @@ internal fun ObjCExportedInterface.createCodeSpec(symbolTable: SymbolTable): Obj
}
if (descriptor.needCompanionObjectProperty(namer, mapper)) {
methods += ObjCGetterForObjectInstance(namer.getCompanionObjectPropertySelector(descriptor),
symbolTable.referenceClass(descriptor.companionObjectDescriptor!!))
methods += ObjCGetterForObjectInstance(
namer.getCompanionObjectPropertySelector(descriptor),
symbolTable.descriptorExtension.referenceClass(descriptor.companionObjectDescriptor!!)
)
}
if (descriptor.kind == ClassKind.ENUM_CLASS) {
descriptor.enumEntries.mapTo(methods) {
ObjCGetterForKotlinEnumEntry(symbolTable.referenceEnumEntry(it), namer.getEnumEntrySelector(it))
ObjCGetterForKotlinEnumEntry(symbolTable.descriptorExtension.referenceEnumEntry(it), namer.getEnumEntrySelector(it))
}
descriptor.getEnumValuesFunctionDescriptor()?.let {
methods += ObjCClassMethodForKotlinEnumValuesOrEntries(
symbolTable.referenceSimpleFunction(it),
symbolTable.descriptorExtension.referenceSimpleFunction(it),
namer.getEnumStaticMemberSelector(it)
)
}
descriptor.getEnumEntriesPropertyDescriptor()?.let {
methods += ObjCClassMethodForKotlinEnumValuesOrEntries(
symbolTable.referenceSimpleFunction(it.getter!!),
symbolTable.descriptorExtension.referenceSimpleFunction(it.getter!!),
namer.getEnumStaticMemberSelector(it)
)
}
@@ -227,4 +229,4 @@ internal class ObjCClassForKotlinFile(
) : ObjCTypeSpec(binaryName) {
override fun toString(): String =
"ObjC spec of class `$binaryName` for `${sourceFile.name}`"
}
}