Rename: FirResolveState -> FirModuleResolveState to reflect per-module status
This commit is contained in:
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -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 =
|
||||||
|
|||||||
Reference in New Issue
Block a user