FIR IDE: always invalidate PSI -> FIR caches on any change
This commit is contained in:
+7
-7
@@ -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
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user