[LL FIR] fix a memory leak from LLFirNonUnderContentRootSessionFactory

This commit is contained in:
Ilya Kirillov
2022-12-06 21:10:29 +01:00
committed by teamcity
parent b4b05b7bf6
commit a297240870
2 changed files with 7 additions and 4 deletions
@@ -10,13 +10,11 @@ import com.intellij.psi.util.CachedValue
import com.intellij.psi.util.CachedValueProvider
import com.intellij.psi.util.CachedValuesManager
import com.intellij.util.containers.ContainerUtil
import org.jetbrains.annotations.TestOnly
import java.util.concurrent.ConcurrentHashMap
public abstract class SoftCachedMap<K : Any, V : Any> {
public abstract fun getOrPut(key: K, create: () -> V): V
@TestOnly
public abstract fun clear()
public companion object {
@@ -6,6 +6,7 @@
package org.jetbrains.kotlin.analysis.low.level.api.fir.project.structure
import com.intellij.openapi.project.Project
import com.intellij.psi.util.PsiModificationTracker
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirGlobalResolveComponents
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirLazyDeclarationResolver
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirModuleResolveComponents
@@ -18,6 +19,7 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.LLFirSessionInva
import org.jetbrains.kotlin.analysis.project.structure.KtNotUnderContentRootModule
import org.jetbrains.kotlin.analysis.providers.createDeclarationProvider
import org.jetbrains.kotlin.analysis.providers.createPackageProvider
import org.jetbrains.kotlin.analysis.utils.caches.SoftCachedMap
import org.jetbrains.kotlin.config.LanguageVersionSettingsImpl
import org.jetbrains.kotlin.fir.PrivateSessionConstructor
import org.jetbrains.kotlin.fir.SessionConfiguration
@@ -34,10 +36,13 @@ import org.jetbrains.kotlin.fir.session.*
import org.jetbrains.kotlin.fir.symbols.FirLazyDeclarationResolver
import org.jetbrains.kotlin.platform.jvm.JvmPlatforms
import org.jetbrains.kotlin.resolve.jvm.modules.JavaModuleResolver
import java.util.concurrent.ConcurrentHashMap
internal class LLFirNonUnderContentRootSessionFactory(private val project: Project) {
private val cache = ConcurrentHashMap<KtNotUnderContentRootModule, LLFirResolvableModuleSession>()
private val cache = SoftCachedMap.create<KtNotUnderContentRootModule, LLFirResolvableModuleSession>(
project,
kind = SoftCachedMap.Kind.STRONG_KEYS_SOFT_VALUES,
trackers = listOf(PsiModificationTracker.MODIFICATION_COUNT),
)
fun getNonUnderContentRootSession(
module: KtNotUnderContentRootModule,