From 863156679d742362e4027bc42d7697cf1b68980d Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Mon, 29 Mar 2021 15:02:19 +0200 Subject: [PATCH] FIR: use FirCachesFactory in BuiltInsPackageFragment.getClassLikeSymbolByFqName --- .../impl/FirBuiltinSymbolProvider.kt | 38 +++++++++---------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirBuiltinSymbolProvider.kt b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirBuiltinSymbolProvider.kt index e0ff6ac5cb6..e5787cde08f 100644 --- a/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirBuiltinSymbolProvider.kt +++ b/compiler/fir/fir-deserialization/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirBuiltinSymbolProvider.kt @@ -9,6 +9,8 @@ import org.jetbrains.kotlin.builtins.StandardNames import org.jetbrains.kotlin.builtins.functions.FunctionClassKind import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.fir.* +import org.jetbrains.kotlin.fir.caches.createCacheWithPostCompute +import org.jetbrains.kotlin.fir.caches.firCachesFactory import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.builder.buildRegularClass import org.jetbrains.kotlin.fir.declarations.builder.buildSimpleFunction @@ -286,7 +288,21 @@ open class FirBuiltinSymbolProvider( ).memberDeserializer } - private val lookup = mutableMapOf() + private val lookup = session.firCachesFactory.createCacheWithPostCompute( + { classId: ClassId, context: FirDeserializationContext? -> FirRegularClassSymbol(classId) to context } + ) { classId, symbol, parentContext -> + val classData = classDataFinder.findClassData(classId)!! + val classProto = classData.classProto + + deserializeClassToSymbol( + classId, classProto, symbol, nameResolver, session, + moduleData, + defaultAnnotationDeserializer =null, kotlinScopeProvider, parentContext, + containerSource =null, + origin = FirDeclarationOrigin.BuiltIns, + this::findAndDeserializeClass, + ) + } fun getClassLikeSymbolByFqName(classId: ClassId): FirRegularClassSymbol? = findAndDeserializeClass(classId) @@ -297,25 +313,7 @@ open class FirBuiltinSymbolProvider( ): FirRegularClassSymbol? { val classIdExists = classId in classDataFinder.allClassIds if (!classIdExists) return null - return lookup.getOrPut(classId, { FirRegularClassSymbol(classId) }) { symbol -> - val classData = classDataFinder.findClassData(classId)!! - val classProto = classData.classProto - - deserializeClassToSymbol( - classId, - classProto, - symbol, - nameResolver, - session, - moduleData, - defaultAnnotationDeserializer = null, - kotlinScopeProvider, - parentContext, - containerSource = null, - origin = FirDeclarationOrigin.BuiltIns, - this::findAndDeserializeClass, - ) - } + return lookup.getValue(classId, parentContext) } fun getTopLevelCallableSymbols(name: Name): List> {