FIR IDE: always invalidate PSI -> FIR caches on any change

This commit is contained in:
Ilya Kirillov
2020-06-05 11:30:51 +03:00
parent c3f547ec77
commit 52a422350b
@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.idea.fir.low.level.api
import com.intellij.openapi.components.ServiceManager import com.intellij.openapi.components.ServiceManager
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.util.ModificationTracker import com.intellij.openapi.util.ModificationTracker
import org.jetbrains.kotlin.analyzer.TrackableModuleInfo
import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider import org.jetbrains.kotlin.fir.java.FirProjectSessionProvider
import org.jetbrains.kotlin.idea.caches.project.IdeaModuleInfo import org.jetbrains.kotlin.idea.caches.project.IdeaModuleInfo
@@ -40,24 +39,25 @@ internal class FirIdeResolveStateServiceImpl(val project: Project) : FirIdeResol
return FirModuleResolveStateImpl(provider) return FirModuleResolveStateImpl(provider)
} }
private fun createModuleData(moduleInfo: IdeaModuleInfo): FirModuleData { private fun createModuleData(): FirModuleData {
val state = createResolveState() val state = createResolveState()
val modificationTracker = (moduleInfo as? TrackableModuleInfo)?.createModificationTracker() ?: fallbackModificationTracker // We want to invalidate cache on every PSI change for now
return FirModuleData(state, modificationTracker) // This is needed for working with high level API until the proper caching is implemented
return FirModuleData(state, fallbackModificationTracker)
} }
// TODO: multi thread protection // TODO: multi thread protection
override fun getResolveState(moduleInfo: IdeaModuleInfo): FirModuleResolveState { override fun getResolveState(moduleInfo: IdeaModuleInfo): FirModuleResolveState {
var moduleData = stateCache.getOrPut(moduleInfo) { var moduleData = stateCache.getOrPut(moduleInfo) {
createModuleData(moduleInfo) createModuleData()
} }
if (moduleData.isOutOfDate()) { if (moduleData.isOutOfDate()) {
moduleData = createModuleData(moduleInfo) moduleData = createModuleData()
stateCache[moduleInfo] = moduleData stateCache[moduleInfo] = moduleData
} }
return moduleData.state return moduleData.state
} }
override val fallbackModificationTracker: ModificationTracker? = override val fallbackModificationTracker: ModificationTracker? =
org.jetbrains.kotlin.analyzer.KotlinModificationTrackerService.getInstance(project).outOfBlockModificationTracker org.jetbrains.kotlin.analyzer.KotlinModificationTrackerService.getInstance(project).modificationTracker
} }