[AA] clear sessions on low memory KTIJ-29471
diff --git a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionInvalidationService.kt b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionInvalidationService.kt index 1117180..1559a2d 100644 --- a/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionInvalidationService.kt +++ b/analysis/low-level-api-fir/src/org/jetbrains/kotlin/analysis/low/level/api/fir/sessions/LLFirSessionInvalidationService.kt
@@ -6,7 +6,9 @@ package org.jetbrains.kotlin.analysis.low.level.api.fir.sessions import com.intellij.openapi.application.ApplicationManager +import com.intellij.openapi.application.ModalityState import com.intellij.openapi.project.Project +import com.intellij.openapi.util.LowMemoryWatcher import com.intellij.psi.util.PsiModificationTracker import org.jetbrains.kotlin.analysis.project.structure.* import org.jetbrains.kotlin.analysis.providers.KotlinAnchorModuleProvider @@ -19,6 +21,16 @@ * sessions in [LLFirSessionCache] and the cache has to be kept consistent. */ internal class LLFirSessionInvalidationService(private val project: Project) { + init { + LowMemoryWatcher.register({ + val application = ApplicationManager.getApplication() + application.invokeLater( + Runnable { application.runWriteAction(Runnable { invalidateAll(includeLibraryModules = true) }) }, + ModalityState.defaultModalityState() + ) + }, project) + } + internal class LLKotlinModuleStateModificationListener(val project: Project) : KotlinModuleStateModificationListener { override fun onModification(module: KtModule, modificationKind: KotlinModuleStateModificationKind) { getInstance(project).invalidate(module)