From 03c3469a141a6f7c766109e76ef0969ca0b9d8b0 Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Fri, 14 Jun 2019 19:50:21 +0300 Subject: [PATCH] [FIR] Enhance caches in providers --- .../KotlinDeserializedJvmSymbolsProvider.kt | 10 +++++----- .../kotlin/fir/resolve/AbstractFirSymbolProvider.kt | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) 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 c87213def56..70e82b87dbe 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 @@ -55,6 +55,7 @@ import org.jetbrains.kotlin.resolve.jvm.JvmClassName import org.jetbrains.kotlin.serialization.deserialization.IncompatibleVersionErrorData import org.jetbrains.kotlin.serialization.deserialization.getName import org.jetbrains.kotlin.utils.addToStdlib.firstNotNullResult +import org.jetbrains.kotlin.utils.getOrPutNullable class KotlinDeserializedJvmSymbolsProvider( val session: FirSession, @@ -63,10 +64,9 @@ class KotlinDeserializedJvmSymbolsProvider( private val kotlinClassFinder: KotlinClassFinder, private val javaClassFinder: JavaClassFinder ) : AbstractFirSymbolProvider() { - - private val classesCache = mutableMapOf() - private val typeAliasCache = mutableMapOf() - private val packagePartsCache = mutableMapOf>() + private val classesCache = HashMap() + private val typeAliasCache = HashMap() + private val packagePartsCache = HashMap>() private class PackagePartsCacheData( val proto: ProtoBuf.Package, @@ -156,7 +156,7 @@ class KotlinDeserializedJvmSymbolsProvider( private fun findAndDeserializeTypeAlias( classId: ClassId ): FirTypeAliasSymbol? { - return typeAliasCache.getOrPut(classId) { + return typeAliasCache.getOrPutNullable(classId) { getPackageParts(classId.packageFqName).firstNotNullResult { part -> val ids = part.typeAliasNameIndex[classId.shortClassName] if (ids == null || ids.isEmpty()) return@firstNotNullResult null diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/AbstractFirSymbolProvider.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/AbstractFirSymbolProvider.kt index 0b02eb0095c..c43cc8e0b27 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/AbstractFirSymbolProvider.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/AbstractFirSymbolProvider.kt @@ -15,12 +15,12 @@ import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.name.FqName abstract class AbstractFirSymbolProvider : FirSymbolProvider() { - protected val classCache = mutableMapOf() - protected val topLevelCallableCache = mutableMapOf>() - protected val packageCache = mutableMapOf() + protected val classCache = HashMap() + protected val topLevelCallableCache = HashMap>() + protected val packageCache = HashMap() protected inline fun MutableMap.lookupCacheOrCalculate(key: K, crossinline l: (K) -> V): V? { - return if (key in this.keys) { + return if (containsKey(key)) { this[key] } else { val calculated = l(key) @@ -32,7 +32,7 @@ abstract class AbstractFirSymbolProvider : FirSymbolProvider() { protected inline fun MutableMap.lookupCacheOrCalculateWithPostCompute( key: K, crossinline l: (K) -> Pair, postCompute: (V, T) -> Unit ): V? { - return if (key in this.keys) { + return if (containsKey(key)) { this[key] } else { val calculated = l(key)