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.builtins.functions.FunctionClassKind
|
||||||
import org.jetbrains.kotlin.descriptors.*
|
import org.jetbrains.kotlin.descriptors.*
|
||||||
import org.jetbrains.kotlin.fir.*
|
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.*
|
||||||
import org.jetbrains.kotlin.fir.declarations.builder.buildRegularClass
|
import org.jetbrains.kotlin.fir.declarations.builder.buildRegularClass
|
||||||
import org.jetbrains.kotlin.fir.declarations.builder.buildSimpleFunction
|
import org.jetbrains.kotlin.fir.declarations.builder.buildSimpleFunction
|
||||||
@@ -286,7 +288,21 @@ open class FirBuiltinSymbolProvider(
|
|||||||
).memberDeserializer
|
).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? =
|
fun getClassLikeSymbolByFqName(classId: ClassId): FirRegularClassSymbol? =
|
||||||
findAndDeserializeClass(classId)
|
findAndDeserializeClass(classId)
|
||||||
@@ -297,25 +313,7 @@ open class FirBuiltinSymbolProvider(
|
|||||||
): FirRegularClassSymbol? {
|
): FirRegularClassSymbol? {
|
||||||
val classIdExists = classId in classDataFinder.allClassIds
|
val classIdExists = classId in classDataFinder.allClassIds
|
||||||
if (!classIdExists) return null
|
if (!classIdExists) return null
|
||||||
return lookup.getOrPut(classId, { FirRegularClassSymbol(classId) }) { symbol ->
|
return lookup.getValue(classId, 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 getTopLevelCallableSymbols(name: Name): List<FirCallableSymbol<*>> {
|
fun getTopLevelCallableSymbols(name: Name): List<FirCallableSymbol<*>> {
|
||||||
|
|||||||
Reference in New Issue
Block a user