[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 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,
|
||||||
|
|||||||
+4
-2
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user