diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt index d865d087c7c..cde88c26ea6 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrConverter.kt @@ -486,7 +486,7 @@ class Fir2IrConverter( classifierStorage.getIrEnumEntry(declaration, parent as IrClass) } is FirAnonymousInitializer -> { - callablesGenerator.createIrAnonymousInitializer(declaration, parent as IrClass) + declarationStorage.getOrCreateIrAnonymousInitializer(declaration, parent as IrClass) } is FirTypeAlias -> { // DO NOTHING 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 ab7ace69753..61a73f67fdc 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 @@ -48,6 +48,7 @@ import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.resolve.jvm.JvmClassName import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerAbiStability import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource +import org.jetbrains.kotlin.utils.addToStdlib.getOrPut import org.jetbrains.kotlin.utils.threadLocal import java.util.concurrent.ConcurrentHashMap @@ -475,8 +476,14 @@ class Fir2IrDeclarationStorage( return irFunction } - fun getCachedIrAnonymousInitializer(anonymousInitializer: FirAnonymousInitializer): IrAnonymousInitializer? = - initializerCache[anonymousInitializer] + fun getOrCreateIrAnonymousInitializer( + anonymousInitializer: FirAnonymousInitializer, + containingIrClass: IrClass, + ): IrAnonymousInitializer { + return initializerCache.computeIfAbsent(anonymousInitializer) { + callablesGenerator.createIrAnonymousInitializer(anonymousInitializer, containingIrClass) + } + } @OptIn(IrSymbolInternals::class) fun getCachedIrConstructor( diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt index fbcd4c1da02..c41806bd273 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/Fir2IrVisitor.kt @@ -387,7 +387,7 @@ class Fir2IrVisitor( anonymousInitializer: FirAnonymousInitializer, data: Any? ): IrElement = whileAnalysing(session, anonymousInitializer) { - val irAnonymousInitializer = declarationStorage.getCachedIrAnonymousInitializer(anonymousInitializer)!! + val irAnonymousInitializer = declarationStorage.getOrCreateIrAnonymousInitializer(anonymousInitializer, conversionScope.lastClass()!!) declarationStorage.enterScope(irAnonymousInitializer.symbol) irAnonymousInitializer.body = convertToIrBlockBody(anonymousInitializer.body!!) declarationStorage.leaveScope(irAnonymousInitializer.symbol) diff --git a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/Fir2IrCallableDeclarationsGenerator.kt b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/Fir2IrCallableDeclarationsGenerator.kt index 1985959eb5f..4a4b4a6ef82 100644 --- a/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/Fir2IrCallableDeclarationsGenerator.kt +++ b/compiler/fir/fir2ir/src/org/jetbrains/kotlin/fir/backend/generators/Fir2IrCallableDeclarationsGenerator.kt @@ -367,7 +367,6 @@ class Fir2IrCallableDeclarationsGenerator(val components: Fir2IrComponents) : Fi irParent.descriptor ).apply { this.parent = irParent - initializerCache[anonymousInitializer] = this } } }