[FIR2IR] Extract logic of IR declarations generation into separate component. Part 10
Restore old behavior of forced creation of fake-overrides This behavior semantically is not fully correct, because it ignores existed f/o in storages and overwrites them, but replacing `createIr...` with `getOrCreate...` leads to problems with f/o in actual classes ^KT-61513
This commit is contained in:
committed by
Space Team
parent
c215df8b93
commit
5163e578aa
+5
-2
@@ -52,6 +52,7 @@ import org.jetbrains.kotlin.serialization.deserialization.descriptors.Deserializ
|
||||
import org.jetbrains.kotlin.utils.threadLocal
|
||||
import java.util.concurrent.ConcurrentHashMap
|
||||
|
||||
@OptIn(LeakedDeclarationCaches::class)
|
||||
class Fir2IrDeclarationStorage(
|
||||
private val components: Fir2IrComponents,
|
||||
private val moduleDescriptor: FirModuleDescriptor,
|
||||
@@ -440,7 +441,8 @@ class Fir2IrDeclarationStorage(
|
||||
return createAndCacheIrFunction(function, irParent, predefinedOrigin, isLocal, fakeOverrideOwnerLookupTag)
|
||||
}
|
||||
|
||||
private fun createAndCacheIrFunction(
|
||||
@LeakedDeclarationCaches
|
||||
fun createAndCacheIrFunction(
|
||||
function: FirFunction,
|
||||
irParent: IrDeclarationParent?,
|
||||
predefinedOrigin: IrDeclarationOrigin? = null,
|
||||
@@ -543,7 +545,8 @@ class Fir2IrDeclarationStorage(
|
||||
}
|
||||
}
|
||||
|
||||
private fun createAndCacheIrProperty(
|
||||
@LeakedDeclarationCaches
|
||||
fun createAndCacheIrProperty(
|
||||
property: FirProperty,
|
||||
irParent: IrDeclarationParent?,
|
||||
predefinedOrigin: IrDeclarationOrigin? = null,
|
||||
|
||||
+4
-2
@@ -119,10 +119,11 @@ class FakeOverrideGenerator(
|
||||
) {
|
||||
val isLocal = firClass !is FirRegularClass || firClass.isLocal
|
||||
useSiteOrStaticScope.processFunctionsByName(name) { functionSymbol ->
|
||||
@OptIn(LeakedDeclarationCaches::class)
|
||||
createFakeOverriddenIfNeeded(
|
||||
firClass, irClass, isLocal, functionSymbol,
|
||||
declarationStorage::getCachedIrFunction,
|
||||
declarationStorage::getOrCreateIrFunction,
|
||||
declarationStorage::createAndCacheIrFunction,
|
||||
createFakeOverrideSymbol = { firFunction, callableSymbol ->
|
||||
val symbol = FirFakeOverrideGenerator.createSymbolForSubstitutionOverride(callableSymbol, firClass.symbol.classId)
|
||||
FirFakeOverrideGenerator.createSubstitutionOverrideFunction(
|
||||
@@ -147,10 +148,11 @@ class FakeOverrideGenerator(
|
||||
useSiteOrStaticScope.processPropertiesByName(name) { propertyOrFieldSymbol ->
|
||||
when (propertyOrFieldSymbol) {
|
||||
is FirPropertySymbol -> {
|
||||
@OptIn(LeakedDeclarationCaches::class)
|
||||
createFakeOverriddenIfNeeded(
|
||||
firClass, irClass, isLocal, propertyOrFieldSymbol,
|
||||
declarationStorage::getCachedIrProperty,
|
||||
declarationStorage::getOrCreateIrProperty,
|
||||
declarationStorage::createAndCacheIrProperty,
|
||||
createFakeOverrideSymbol = { firProperty, callableSymbol ->
|
||||
val symbolForOverride =
|
||||
FirFakeOverrideGenerator.createSymbolForSubstitutionOverride(callableSymbol, firClass.symbol.classId)
|
||||
|
||||
Reference in New Issue
Block a user