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,6 +65,8 @@ class KotlinDeserializedJvmSymbolsProvider(
classId: ClassId, classId: ClassId,
parentContext: FirDeserializationContext? = null parentContext: FirDeserializationContext? = null
): FirClassSymbol? { ): FirClassSymbol? {
return classesCache.getOrPut(classId) {
//return null
val kotlinJvmBinaryClass = kotlinClassFinder.findKotlinClass(classId) ?: return null val kotlinJvmBinaryClass = kotlinClassFinder.findKotlinClass(classId) ?: return null
if (kotlinJvmBinaryClass.classHeader.kind != KotlinClassHeader.Kind.CLASS) return null if (kotlinJvmBinaryClass.classHeader.kind != KotlinClassHeader.Kind.CLASS) return null
@@ -72,11 +74,12 @@ class KotlinDeserializedJvmSymbolsProvider(
val strings = kotlinJvmBinaryClass.classHeader.strings ?: return null val strings = kotlinJvmBinaryClass.classHeader.strings ?: return null
val (nameResolver, classProto) = JvmProtoBufUtil.readClassDataFrom(data, strings) val (nameResolver, classProto) = JvmProtoBufUtil.readClassDataFrom(data, strings)
return classesCache.getOrPut(classId, { FirClassSymbol(classId) }) { symbol -> val symbol = FirClassSymbol(classId)
deserializeClassToSymbol( deserializeClassToSymbol(
classId, classProto, symbol, nameResolver, session, parentContext, classId, classProto, symbol, nameResolver, session, parentContext,
this::findAndDeserializeClass this::findAndDeserializeClass
) )
symbol
} }
} }