FIR: use FirCachesFactory in BuiltInsPackageFragment.getClassLikeSymbolByFqName

This commit is contained in:
Ilya Kirillov
2021-03-29 15:02:19 +02:00
committed by teamcityserver
parent 7a43c2de79
commit 863156679d
@@ -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<ClassId, FirRegularClassSymbol>()
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<FirCallableSymbol<*>> {