[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:
Dmitrii Gridin
2023-02-08 20:09:21 +01:00
parent a09d0aa1cf
commit 8f34b6599a
@@ -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)