FIR: use FirCachesFactory in BuiltInsPackageFragment.getClassLikeSymbolByFqName
This commit is contained in:
committed by
teamcityserver
parent
7a43c2de79
commit
863156679d
+18
-20
@@ -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<*>> {
|
||||
|
||||
Reference in New Issue
Block a user