[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 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,
@@ -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)