[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)