Rename: FirResolveState -> FirModuleResolveState to reflect per-module status

This commit is contained in:
Mikhail Glukhikh
2019-12-16 12:35:22 +03:00
parent 8dbbd64beb
commit 8703da5a25
4 changed files with 16 additions and 16 deletions
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.fir.resolve.diagnostics.collectors.AbstractDiagnosti
import org.jetbrains.kotlin.fir.resolve.diagnostics.collectors.registerAllComponents import org.jetbrains.kotlin.fir.resolve.diagnostics.collectors.registerAllComponents
import org.jetbrains.kotlin.psi.KtElement import org.jetbrains.kotlin.psi.KtElement
class FirIdeDiagnosticsCollector(private val resolveState: FirResolveState) : AbstractDiagnosticCollector() { class FirIdeDiagnosticsCollector(private val resolveState: FirModuleResolveState) : AbstractDiagnosticCollector() {
init { init {
registerAllComponents() registerAllComponents()
@@ -21,10 +21,10 @@ interface FirIdeResolveStateService {
val fallbackModificationTracker: ModificationTracker? val fallbackModificationTracker: ModificationTracker?
fun getResolveState(moduleInfo: IdeaModuleInfo): FirResolveState fun getResolveState(moduleInfo: IdeaModuleInfo): FirModuleResolveState
} }
private class FirModuleData(val state: FirResolveState, val modificationTracker: ModificationTracker?) { private class FirModuleData(val state: FirModuleResolveState, val modificationTracker: ModificationTracker?) {
val modificationCount: Long = modificationTracker?.modificationCount ?: Long.MIN_VALUE val modificationCount: Long = modificationTracker?.modificationCount ?: Long.MIN_VALUE
fun isOutOfDate(): Boolean { fun isOutOfDate(): Boolean {
@@ -36,9 +36,9 @@ private class FirModuleData(val state: FirResolveState, val modificationTracker:
class FirIdeResolveStateServiceImpl(val project: Project) : FirIdeResolveStateService { class FirIdeResolveStateServiceImpl(val project: Project) : FirIdeResolveStateService {
private val stateCache = mutableMapOf<IdeaModuleInfo, FirModuleData>() private val stateCache = mutableMapOf<IdeaModuleInfo, FirModuleData>()
private fun createResolveState(): FirResolveState { private fun createResolveState(): FirModuleResolveState {
val provider = FirProjectSessionProvider(project) val provider = FirProjectSessionProvider(project)
return FirResolveStateImpl(provider) return FirModuleResolveStateImpl(provider)
} }
private fun createModuleData(moduleInfo: IdeaModuleInfo): FirModuleData { private fun createModuleData(moduleInfo: IdeaModuleInfo): FirModuleData {
@@ -48,7 +48,7 @@ class FirIdeResolveStateServiceImpl(val project: Project) : FirIdeResolveStateSe
} }
// TODO: multi thread protection // TODO: multi thread protection
override fun getResolveState(moduleInfo: IdeaModuleInfo): FirResolveState { override fun getResolveState(moduleInfo: IdeaModuleInfo): FirModuleResolveState {
var moduleData = stateCache.getOrPut(moduleInfo) { var moduleData = stateCache.getOrPut(moduleInfo) {
createModuleData(moduleInfo) createModuleData(moduleInfo)
} }
@@ -50,7 +50,7 @@ private fun getOrCreateIdeSession(
} }
} }
interface FirResolveState { interface FirModuleResolveState {
val sessionProvider: FirSessionProvider val sessionProvider: FirSessionProvider
fun getSession(psi: KtElement): FirSession { fun getSession(psi: KtElement): FirSession {
@@ -72,7 +72,7 @@ interface FirResolveState {
fun setDiagnosticsForFile(file: KtFile, fir: FirFile, diagnostics: Iterable<ConeDiagnostic> = emptyList()) fun setDiagnosticsForFile(file: KtFile, fir: FirFile, diagnostics: Iterable<ConeDiagnostic> = emptyList())
} }
class FirResolveStateImpl(override val sessionProvider: FirSessionProvider) : FirResolveState { class FirModuleResolveStateImpl(override val sessionProvider: FirSessionProvider) : FirModuleResolveState {
private val cache = mutableMapOf<KtElement, FirElement>() private val cache = mutableMapOf<KtElement, FirElement>()
private val diagnosticCache = mutableMapOf<KtElement, MutableList<Diagnostic>>() private val diagnosticCache = mutableMapOf<KtElement, MutableList<Diagnostic>>()
@@ -120,5 +120,5 @@ class FirResolveStateImpl(override val sessionProvider: FirSessionProvider) : Fi
} }
} }
fun KtElement.firResolveState(): FirResolveState = fun KtElement.firResolveState(): FirModuleResolveState =
FirIdeResolveStateService.getInstance(project).getResolveState(getModuleInfo()) FirIdeResolveStateService.getInstance(project).getResolveState(getModuleInfo())
@@ -73,7 +73,7 @@ private fun FirFile.findCallableMember(
} }
fun KtCallableDeclaration.getOrBuildFir( fun KtCallableDeclaration.getOrBuildFir(
state: FirResolveState, state: FirModuleResolveState,
phase: FirResolvePhase = FirResolvePhase.DECLARATIONS phase: FirResolvePhase = FirResolvePhase.DECLARATIONS
): FirCallableDeclaration<*> { ): FirCallableDeclaration<*> {
val session = state.getSession(this) val session = state.getSession(this)
@@ -97,7 +97,7 @@ fun KtCallableDeclaration.getOrBuildFir(
} }
fun KtClassOrObject.getOrBuildFir( fun KtClassOrObject.getOrBuildFir(
state: FirResolveState, state: FirModuleResolveState,
phase: FirResolvePhase = FirResolvePhase.DECLARATIONS phase: FirResolvePhase = FirResolvePhase.DECLARATIONS
): FirRegularClass { ): FirRegularClass {
val session = state.getSession(this) val session = state.getSession(this)
@@ -118,14 +118,14 @@ fun KtClassOrObject.getOrBuildFir(
return firClass return firClass
} }
private fun KtFile.getOrBuildRawFirFile(state: FirResolveState): Pair<IdeFirProvider, FirFile> { private fun KtFile.getOrBuildRawFirFile(state: FirModuleResolveState): Pair<IdeFirProvider, FirFile> {
val session = state.getSession(this) val session = state.getSession(this)
val firProvider = FirProvider.getInstance(session) as IdeFirProvider val firProvider = FirProvider.getInstance(session) as IdeFirProvider
return firProvider to firProvider.getOrBuildFile(this) return firProvider to firProvider.getOrBuildFile(this)
} }
fun KtFile.getOrBuildFir( fun KtFile.getOrBuildFir(
state: FirResolveState, state: FirModuleResolveState,
phase: FirResolvePhase = FirResolvePhase.DECLARATIONS phase: FirResolvePhase = FirResolvePhase.DECLARATIONS
): FirFile { ): FirFile {
val (firProvider, firFile) = getOrBuildRawFirFile(state) val (firProvider, firFile) = getOrBuildRawFirFile(state)
@@ -138,7 +138,7 @@ fun KtFile.getOrBuildFir(
return firFile return firFile
} }
fun KtFile.getOrBuildFirWithDiagnostics(state: FirResolveState): FirFile { fun KtFile.getOrBuildFirWithDiagnostics(state: FirModuleResolveState): FirFile {
val (_, firFile) = getOrBuildRawFirFile(state) val (_, firFile) = getOrBuildRawFirFile(state)
val currentResolvePhase = firFile.resolvePhase val currentResolvePhase = firFile.resolvePhase
if (currentResolvePhase < FirResolvePhase.BODY_RESOLVE) { if (currentResolvePhase < FirResolvePhase.BODY_RESOLVE) {
@@ -159,7 +159,7 @@ private fun FirDeclaration.runResolve(
file: FirFile, file: FirFile,
firProvider: IdeFirProvider, firProvider: IdeFirProvider,
toPhase: FirResolvePhase, toPhase: FirResolvePhase,
state: FirResolveState state: FirModuleResolveState
) { ) {
val nonLazyPhase = minOf(toPhase, FirResolvePhase.DECLARATIONS) val nonLazyPhase = minOf(toPhase, FirResolvePhase.DECLARATIONS)
file.runResolve(toPhase = nonLazyPhase, fromPhase = this.resolvePhase) file.runResolve(toPhase = nonLazyPhase, fromPhase = this.resolvePhase)
@@ -194,7 +194,7 @@ private fun FirDeclaration.runResolve(
} }
fun KtElement.getOrBuildFir( fun KtElement.getOrBuildFir(
state: FirResolveState, state: FirModuleResolveState,
phase: FirResolvePhase = FirResolvePhase.BODY_RESOLVE phase: FirResolvePhase = FirResolvePhase.BODY_RESOLVE
): FirElement { ): FirElement {
val containerFir: FirDeclaration = val containerFir: FirDeclaration =