[K/N] Implement objc overridablity condition for IR

^KT-61511
This commit is contained in:
Pavel Kunyavskiy
2023-10-09 11:16:48 +02:00
committed by Space Team
parent 202f30f910
commit 156c341eeb
16 changed files with 219 additions and 11 deletions
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.ir.IrBuiltIns
import org.jetbrains.kotlin.ir.declarations.*
import org.jetbrains.kotlin.ir.declarations.impl.IrExternalPackageFragmentImpl
import org.jetbrains.kotlin.ir.declarations.impl.IrFactoryImpl
import org.jetbrains.kotlin.ir.overrides.IrExternalOverridabilityCondition
import org.jetbrains.kotlin.ir.symbols.impl.DescriptorlessExternalPackageFragmentSymbol
import org.jetbrains.kotlin.ir.util.*
import org.jetbrains.kotlin.load.java.JvmAnnotationNames
@@ -32,6 +33,7 @@ class JvmFir2IrExtensions(
private val irDeserializer: JvmIrDeserializer,
private val mangler: KotlinMangler.IrMangler,
) : Fir2IrExtensions, JvmGeneratorExtensions {
override val externalOverridabilityConditions: List<IrExternalOverridabilityCondition> = emptyList() // TODO: KT-61370, KT-61804
override val classNameOverride: MutableMap<IrClass, JvmClassName> = mutableMapOf()
override val cachedFields = CachedFieldsForObjectInstances(IrFactoryImpl, configuration.languageVersionSettings)
@@ -561,7 +561,7 @@ class Fir2IrConverter(
IrFakeOverrideBuilder(
typeContextProvider(irBuiltins),
Fir2IrFakeOverrideStrategy(friendModulesMap(session), commonMemberStorage.symbolTable, irMangler),
externalOverridabilityConditions = emptyList(), // TODO: KT-61370, KT-61804.
fir2IrExtensions.externalOverridabilityConditions
)
},
moduleDescriptor, commonMemberStorage, irMangler, specialSymbolProvider, initializedIrBuiltIns
@@ -8,10 +8,12 @@ package org.jetbrains.kotlin.fir.backend
import org.jetbrains.kotlin.fir.references.FirReference
import org.jetbrains.kotlin.ir.declarations.IrClass
import org.jetbrains.kotlin.ir.declarations.IrMemberWithContainerSource
import org.jetbrains.kotlin.ir.overrides.IrExternalOverridabilityCondition
import org.jetbrains.kotlin.ir.util.SymbolTable
interface Fir2IrExtensions {
val irNeedsDeserialization: Boolean
val externalOverridabilityConditions: List<IrExternalOverridabilityCondition>
fun generateOrGetFacadeClass(declaration: IrMemberWithContainerSource, components: Fir2IrComponents): IrClass?
fun deserializeToplevelClass(irClass: IrClass, components: Fir2IrComponents): Boolean
@@ -22,6 +24,7 @@ interface Fir2IrExtensions {
override val irNeedsDeserialization: Boolean
get() = false
override val externalOverridabilityConditions: List<IrExternalOverridabilityCondition> = emptyList()
override fun generateOrGetFacadeClass(declaration: IrMemberWithContainerSource, components: Fir2IrComponents): IrClass? = null
override fun deserializeToplevelClass(irClass: IrClass, components: Fir2IrComponents): Boolean = false
override fun registerDeclarations(symbolTable: SymbolTable) {}
@@ -14,6 +14,12 @@ import org.jetbrains.kotlin.fir.declarations.FirSimpleFunction
import org.jetbrains.kotlin.fir.scopes.FirOverrideChecker
import org.jetbrains.kotlin.fir.scopes.impl.FirStandardOverrideChecker
/**
* The same code, as in this class also exists in [org.jetbrains.kotlin.ir.objcinterop.ObjCOverridabilityCondition]
* and in [org.jetbrains.kotlin.ir.objcinterop.IrObjCOverridabilityCondition].
*
* When modifying, all three copies should be synchronized.
*/
class FirNativeOverrideChecker(private val session: FirSession) : FirOverrideChecker {
private val standardOverrideChecker = FirStandardOverrideChecker(session)