[AA FIR] BuilderCache: replace regular map with concurrent to avoid exceptions
Example: ```stacktrace Caused by: java.lang.ArrayIndexOutOfBoundsException: Index 32 out of bounds for length 17 at com.intellij.util.containers.RefHashMap$MyMap.rehash(RefHashMap.java:85) at it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap.insert(Object2ObjectOpenHashMap.java:251) at it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap.put(Object2ObjectOpenHashMap.java:259) at com.intellij.util.containers.RefHashMap.putKey(RefHashMap.java:160) at com.intellij.util.containers.RefKeyRefValueHashMap.put(RefKeyRefValueHashMap.java:55) at org.jetbrains.kotlin.analysis.api.fir.KtSymbolByFirBuilder$FunctionLikeSymbolBuilder.buildFunctionSymbol(KtSymbolByFirBuilder.kt:727) at org.jetbrains.kotlin.analysis.api.fir.scopes.FirScopeUtilsKt$getCallableSymbols$1$1$1$1.invoke(firScopeUtils.kt:25) at org.jetbrains.kotlin.analysis.api.fir.scopes.FirScopeUtilsKt$getCallableSymbols$1$1$1$1.invoke(firScopeUtils.kt:24) at org.jetbrains.kotlin.fir.scopes.impl.FirClassDeclaredMemberScopeImpl.processFunctionsByName(FirClassDeclaredMemberScope.kt:103) ``` ^KTIJ-22749
This commit is contained in:
+1
-1
@@ -608,7 +608,7 @@ internal class KtSymbolByFirBuilder constructor(
|
||||
|
||||
|
||||
private class BuilderCache<From, To : KtSymbol> {
|
||||
private val cache = ContainerUtil.createWeakKeySoftValueMap<From, To>()
|
||||
private val cache = ContainerUtil.createConcurrentWeakKeySoftValueMap<From, To>()
|
||||
|
||||
inline fun <reified S : To> cache(key: From, calculation: () -> S): S {
|
||||
val value = cache.getOrPut(key, calculation)
|
||||
|
||||
Reference in New Issue
Block a user