diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt index 039f181080b..bccea24edec 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrDeclarationStorage.kt @@ -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, diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/FakeOverrideGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/FakeOverrideGenerator.kt index 791712bc786..fd1a5a6d80b 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/FakeOverrideGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/FakeOverrideGenerator.kt @@ -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)