[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:
Dmitriy Novozhilov
2023-08-29 11:36:21 +03:00
committed by Space Team
parent c215df8b93
commit 5163e578aa
2 changed files with 9 additions and 4 deletions
@@ -52,6 +52,7 @@ import org.jetbrains.kotlin.serialization.deserialization.descriptors.Deserializ
import org.jetbrains.kotlin.utils.threadLocal import org.jetbrains.kotlin.utils.threadLocal
import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.ConcurrentHashMap
@OptIn(LeakedDeclarationCaches::class)
class Fir2IrDeclarationStorage( class Fir2IrDeclarationStorage(
private val components: Fir2IrComponents, private val components: Fir2IrComponents,
private val moduleDescriptor: FirModuleDescriptor, private val moduleDescriptor: FirModuleDescriptor,
@@ -440,7 +441,8 @@ class Fir2IrDeclarationStorage(
return createAndCacheIrFunction(function, irParent, predefinedOrigin, isLocal, fakeOverrideOwnerLookupTag) return createAndCacheIrFunction(function, irParent, predefinedOrigin, isLocal, fakeOverrideOwnerLookupTag)
} }
private fun createAndCacheIrFunction( @LeakedDeclarationCaches
fun createAndCacheIrFunction(
function: FirFunction, function: FirFunction,
irParent: IrDeclarationParent?, irParent: IrDeclarationParent?,
predefinedOrigin: IrDeclarationOrigin? = null, predefinedOrigin: IrDeclarationOrigin? = null,
@@ -543,7 +545,8 @@ class Fir2IrDeclarationStorage(
} }
} }
private fun createAndCacheIrProperty( @LeakedDeclarationCaches
fun createAndCacheIrProperty(
property: FirProperty, property: FirProperty,
irParent: IrDeclarationParent?, irParent: IrDeclarationParent?,
predefinedOrigin: IrDeclarationOrigin? = null, predefinedOrigin: IrDeclarationOrigin? = null,
@@ -119,10 +119,11 @@ class FakeOverrideGenerator(
) { ) {
val isLocal = firClass !is FirRegularClass || firClass.isLocal val isLocal = firClass !is FirRegularClass || firClass.isLocal
useSiteOrStaticScope.processFunctionsByName(name) { functionSymbol -> useSiteOrStaticScope.processFunctionsByName(name) { functionSymbol ->
@OptIn(LeakedDeclarationCaches::class)
createFakeOverriddenIfNeeded( createFakeOverriddenIfNeeded(
firClass, irClass, isLocal, functionSymbol, firClass, irClass, isLocal, functionSymbol,
declarationStorage::getCachedIrFunction, declarationStorage::getCachedIrFunction,
declarationStorage::getOrCreateIrFunction, declarationStorage::createAndCacheIrFunction,
createFakeOverrideSymbol = { firFunction, callableSymbol -> createFakeOverrideSymbol = { firFunction, callableSymbol ->
val symbol = FirFakeOverrideGenerator.createSymbolForSubstitutionOverride(callableSymbol, firClass.symbol.classId) val symbol = FirFakeOverrideGenerator.createSymbolForSubstitutionOverride(callableSymbol, firClass.symbol.classId)
FirFakeOverrideGenerator.createSubstitutionOverrideFunction( FirFakeOverrideGenerator.createSubstitutionOverrideFunction(
@@ -147,10 +148,11 @@ class FakeOverrideGenerator(
useSiteOrStaticScope.processPropertiesByName(name) { propertyOrFieldSymbol -> useSiteOrStaticScope.processPropertiesByName(name) { propertyOrFieldSymbol ->
when (propertyOrFieldSymbol) { when (propertyOrFieldSymbol) {
is FirPropertySymbol -> { is FirPropertySymbol -> {
@OptIn(LeakedDeclarationCaches::class)
createFakeOverriddenIfNeeded( createFakeOverriddenIfNeeded(
firClass, irClass, isLocal, propertyOrFieldSymbol, firClass, irClass, isLocal, propertyOrFieldSymbol,
declarationStorage::getCachedIrProperty, declarationStorage::getCachedIrProperty,
declarationStorage::getOrCreateIrProperty, declarationStorage::createAndCacheIrProperty,
createFakeOverrideSymbol = { firProperty, callableSymbol -> createFakeOverrideSymbol = { firProperty, callableSymbol ->
val symbolForOverride = val symbolForOverride =
FirFakeOverrideGenerator.createSymbolForSubstitutionOverride(callableSymbol, firClass.symbol.classId) FirFakeOverrideGenerator.createSymbolForSubstitutionOverride(callableSymbol, firClass.symbol.classId)