diff --git a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/KotlinDeserializedJvmSymbolsProvider.kt b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/KotlinDeserializedJvmSymbolsProvider.kt index eed93a2ec38..12d14b57009 100644 --- a/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/KotlinDeserializedJvmSymbolsProvider.kt +++ b/compiler/fir/java/src/org/jetbrains/kotlin/fir/java/deserialization/KotlinDeserializedJvmSymbolsProvider.kt @@ -50,7 +50,7 @@ class KotlinDeserializedJvmSymbolsProvider( private val kotlinScopeProvider: KotlinScopeProvider, ) : FirSymbolProvider(session) { private val annotationsLoader = AnnotationsLoader(session) - private val typeAliasCache = SymbolProviderCache() + private val typeAliasCache = session.firCachesFactory.createCache(::findAndDeserializeTypeAlias) private val packagePartsCache = SymbolProviderCache>() private val classCache = @@ -131,20 +131,22 @@ class KotlinDeserializedJvmSymbolsProvider( get() = classHeader.isPreRelease override fun getClassLikeSymbolByFqName(classId: ClassId): FirClassLikeSymbol<*>? { - return getClass(classId) ?: findAndDeserializeTypeAlias(classId) + return getClass(classId) ?: getTypeAlias(classId) } - private fun findAndDeserializeTypeAlias( + private fun getTypeAlias( classId: ClassId, ): FirTypeAliasSymbol? { if (!classId.relativeClassName.isOneSegmentFQN()) return null - return typeAliasCache.lookupCacheOrCalculate(classId) { - getPackageParts(classId.packageFqName).firstNotNullResult { part -> - val ids = part.typeAliasNameIndex[classId.shortClassName] - if (ids == null || ids.isEmpty()) return@firstNotNullResult null - val aliasProto = ids.map { part.proto.getTypeAlias(it) }.single() - part.context.memberDeserializer.loadTypeAlias(aliasProto).symbol - } + return typeAliasCache.getValue(classId) + } + + private fun findAndDeserializeTypeAlias(classId: ClassId): FirTypeAliasSymbol? { + return getPackageParts(classId.packageFqName).firstNotNullResult { part -> + val ids = part.typeAliasNameIndex[classId.shortClassName] + if (ids == null || ids.isEmpty()) return@firstNotNullResult null + val aliasProto = ids.map { part.proto.getTypeAlias(it) }.single() + part.context.memberDeserializer.loadTypeAlias(aliasProto).symbol } }