提交 52a42235 编写于 作者: I Ilya Kirillov

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

上级 c3f547ec
...@@ -8,7 +8,6 @@ package org.jetbrains.kotlin.idea.fir.low.level.api ...@@ -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 ...@@ -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
} }
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册