FIR: optimize caching in JVM deserializer

This commit is contained in:
Simon Ogorodnik
2019-04-10 21:21:51 +03:00
committed by Mikhail Glukhikh
parent f453e7df27
commit 879563233a
@@ -65,18 +65,21 @@ class KotlinDeserializedJvmSymbolsProvider(
classId: ClassId,
parentContext: FirDeserializationContext? = null
): FirClassSymbol? {
val kotlinJvmBinaryClass = kotlinClassFinder.findKotlinClass(classId) ?: return null
if (kotlinJvmBinaryClass.classHeader.kind != KotlinClassHeader.Kind.CLASS) return null
return classesCache.getOrPut(classId) {
//return null
val kotlinJvmBinaryClass = kotlinClassFinder.findKotlinClass(classId) ?: return null
if (kotlinJvmBinaryClass.classHeader.kind != KotlinClassHeader.Kind.CLASS) return null
val data = kotlinJvmBinaryClass.classHeader.data ?: return null
val strings = kotlinJvmBinaryClass.classHeader.strings ?: return null
val (nameResolver, classProto) = JvmProtoBufUtil.readClassDataFrom(data, strings)
val data = kotlinJvmBinaryClass.classHeader.data ?: return null
val strings = kotlinJvmBinaryClass.classHeader.strings ?: return null
val (nameResolver, classProto) = JvmProtoBufUtil.readClassDataFrom(data, strings)
return classesCache.getOrPut(classId, { FirClassSymbol(classId) }) { symbol ->
val symbol = FirClassSymbol(classId)
deserializeClassToSymbol(
classId, classProto, symbol, nameResolver, session, parentContext,
this::findAndDeserializeClass
)
symbol
}
}