[FIR2IR] Extract logic of IR declarations generation into separate component. Part 4

Move caching of created IrAnonymousInitializer back to Fir2IrDeclarationStorage
Fix all call-sites
This commit is contained in:
Dmitriy Novozhilov
2023-08-28 11:52:27 +03:00
committed by Space Team
parent 5a46563a2c
commit 6621b16e77
4 changed files with 11 additions and 5 deletions
@@ -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
@@ -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(
@@ -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)
@@ -367,7 +367,6 @@ class Fir2IrCallableDeclarationsGenerator(val components: Fir2IrComponents) : Fi
irParent.descriptor
).apply {
this.parent = irParent
initializerCache[anonymousInitializer] = this
}
}
}