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 0b4012f7007..92536f30fe4 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 @@ -585,7 +585,7 @@ class Fir2IrConverter( classifierStorage.getOrCreateIrEnumEntry(declaration, parent as IrClass) } is FirAnonymousInitializer -> { - declarationStorage.getOrCreateIrAnonymousInitializer(declaration, parent as IrClass) + declarationStorage.createIrAnonymousInitializer(declaration, parent as IrClass) } is FirTypeAlias -> { classifierStorage.getCachedTypeAlias(declaration)?.let { irTypeAlias -> 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 3b0b6874534..3d644cabbc7 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 @@ -933,13 +933,20 @@ class Fir2IrDeclarationStorage( // ------------------------------------ anonymous initializers ------------------------------------ - fun getOrCreateIrAnonymousInitializer( + fun createIrAnonymousInitializer( anonymousInitializer: FirAnonymousInitializer, containingIrClass: IrClass, ): IrAnonymousInitializer { - return initializerCache.computeIfAbsent(anonymousInitializer) { - callablesGenerator.createIrAnonymousInitializer(anonymousInitializer, containingIrClass) + val irInitializer = callablesGenerator.createIrAnonymousInitializer(anonymousInitializer, containingIrClass) + val alreadyContained = initializerCache.put(anonymousInitializer, irInitializer) + require(alreadyContained == null) { + "IR for anonymous initializer already exits: ${anonymousInitializer.render()}" } + return irInitializer + } + + fun getIrAnonymousInitializer(anonymousInitializer: FirAnonymousInitializer): IrAnonymousInitializer { + return initializerCache.getValue(anonymousInitializer) } // ------------------------------------ callables ------------------------------------ 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 419dedaa9b8..80becf74009 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 @@ -392,7 +392,7 @@ class Fir2IrVisitor( anonymousInitializer: FirAnonymousInitializer, data: Any? ): IrElement = whileAnalysing(session, anonymousInitializer) { - val irAnonymousInitializer = declarationStorage.getOrCreateIrAnonymousInitializer(anonymousInitializer, conversionScope.lastClass()!!) + val irAnonymousInitializer = declarationStorage.getIrAnonymousInitializer(anonymousInitializer) declarationStorage.enterScope(irAnonymousInitializer.symbol) irAnonymousInitializer.body = convertToIrBlockBody(anonymousInitializer.body!!) declarationStorage.leaveScope(irAnonymousInitializer.symbol)