[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:
committed by
Space Team
parent
5a46563a2c
commit
6621b16e77
@@ -486,7 +486,7 @@ class Fir2IrConverter(
|
|||||||
classifierStorage.getIrEnumEntry(declaration, parent as IrClass)
|
classifierStorage.getIrEnumEntry(declaration, parent as IrClass)
|
||||||
}
|
}
|
||||||
is FirAnonymousInitializer -> {
|
is FirAnonymousInitializer -> {
|
||||||
callablesGenerator.createIrAnonymousInitializer(declaration, parent as IrClass)
|
declarationStorage.getOrCreateIrAnonymousInitializer(declaration, parent as IrClass)
|
||||||
}
|
}
|
||||||
is FirTypeAlias -> {
|
is FirTypeAlias -> {
|
||||||
// DO NOTHING
|
// DO NOTHING
|
||||||
|
|||||||
+9
-2
@@ -48,6 +48,7 @@ import org.jetbrains.kotlin.psi.KtFile
|
|||||||
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
|
import org.jetbrains.kotlin.resolve.jvm.JvmClassName
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerAbiStability
|
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerAbiStability
|
||||||
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
|
import org.jetbrains.kotlin.serialization.deserialization.descriptors.DeserializedContainerSource
|
||||||
|
import org.jetbrains.kotlin.utils.addToStdlib.getOrPut
|
||||||
import org.jetbrains.kotlin.utils.threadLocal
|
import org.jetbrains.kotlin.utils.threadLocal
|
||||||
import java.util.concurrent.ConcurrentHashMap
|
import java.util.concurrent.ConcurrentHashMap
|
||||||
|
|
||||||
@@ -475,8 +476,14 @@ class Fir2IrDeclarationStorage(
|
|||||||
return irFunction
|
return irFunction
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getCachedIrAnonymousInitializer(anonymousInitializer: FirAnonymousInitializer): IrAnonymousInitializer? =
|
fun getOrCreateIrAnonymousInitializer(
|
||||||
initializerCache[anonymousInitializer]
|
anonymousInitializer: FirAnonymousInitializer,
|
||||||
|
containingIrClass: IrClass,
|
||||||
|
): IrAnonymousInitializer {
|
||||||
|
return initializerCache.computeIfAbsent(anonymousInitializer) {
|
||||||
|
callablesGenerator.createIrAnonymousInitializer(anonymousInitializer, containingIrClass)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@OptIn(IrSymbolInternals::class)
|
@OptIn(IrSymbolInternals::class)
|
||||||
fun getCachedIrConstructor(
|
fun getCachedIrConstructor(
|
||||||
|
|||||||
@@ -387,7 +387,7 @@ class Fir2IrVisitor(
|
|||||||
anonymousInitializer: FirAnonymousInitializer,
|
anonymousInitializer: FirAnonymousInitializer,
|
||||||
data: Any?
|
data: Any?
|
||||||
): IrElement = whileAnalysing(session, anonymousInitializer) {
|
): IrElement = whileAnalysing(session, anonymousInitializer) {
|
||||||
val irAnonymousInitializer = declarationStorage.getCachedIrAnonymousInitializer(anonymousInitializer)!!
|
val irAnonymousInitializer = declarationStorage.getOrCreateIrAnonymousInitializer(anonymousInitializer, conversionScope.lastClass()!!)
|
||||||
declarationStorage.enterScope(irAnonymousInitializer.symbol)
|
declarationStorage.enterScope(irAnonymousInitializer.symbol)
|
||||||
irAnonymousInitializer.body = convertToIrBlockBody(anonymousInitializer.body!!)
|
irAnonymousInitializer.body = convertToIrBlockBody(anonymousInitializer.body!!)
|
||||||
declarationStorage.leaveScope(irAnonymousInitializer.symbol)
|
declarationStorage.leaveScope(irAnonymousInitializer.symbol)
|
||||||
|
|||||||
-1
@@ -367,7 +367,6 @@ class Fir2IrCallableDeclarationsGenerator(val components: Fir2IrComponents) : Fi
|
|||||||
irParent.descriptor
|
irParent.descriptor
|
||||||
).apply {
|
).apply {
|
||||||
this.parent = irParent
|
this.parent = irParent
|
||||||
initializerCache[anonymousInitializer] = this
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user