FIR IDE: make FirModuleResolveState functions to be internal
This commit is contained in:
+10
-15
@@ -21,39 +21,34 @@ import org.jetbrains.kotlin.psi.KtElement
|
|||||||
import org.jetbrains.kotlin.psi.KtFile
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
|
|
||||||
abstract class FirModuleResolveState {
|
abstract class FirModuleResolveState {
|
||||||
abstract val moduleInfo: IdeaModuleInfo
|
|
||||||
abstract val rootModuleSession: FirSession
|
abstract val rootModuleSession: FirSession
|
||||||
|
|
||||||
|
internal abstract val moduleInfo: IdeaModuleInfo
|
||||||
|
|
||||||
abstract val firTransformerProvider: FirTransformerProvider
|
abstract val firTransformerProvider: FirTransformerProvider
|
||||||
|
|
||||||
abstract fun getSessionFor(moduleInfo: IdeaModuleInfo): FirSession
|
internal abstract fun getSessionFor(moduleInfo: IdeaModuleInfo): FirSession
|
||||||
|
|
||||||
abstract fun getOrBuildFirFor(element: KtElement): FirElement
|
internal abstract fun getOrBuildFirFor(element: KtElement): FirElement
|
||||||
|
|
||||||
abstract fun getFirFile(ktFile: KtFile): FirFile
|
internal abstract fun getFirFile(ktFile: KtFile): FirFile
|
||||||
|
|
||||||
abstract fun getDiagnostics(element: KtElement): List<Diagnostic>
|
internal abstract fun getDiagnostics(element: KtElement): List<Diagnostic>
|
||||||
|
|
||||||
abstract fun collectDiagnosticsForFile(ktFile: KtFile): Collection<Diagnostic>
|
internal abstract fun collectDiagnosticsForFile(ktFile: KtFile): Collection<Diagnostic>
|
||||||
|
|
||||||
// todo temporary, used only in completion
|
// todo temporary, used only in completion
|
||||||
abstract fun recordPsiToFirMappingsForCompletionFrom(fir: FirDeclaration, firFile: FirFile, ktFile: KtFile)
|
internal abstract fun recordPsiToFirMappingsForCompletionFrom(fir: FirDeclaration, firFile: FirFile, ktFile: KtFile)
|
||||||
|
|
||||||
abstract fun <D : FirDeclaration> resolvedFirToPhase(declaration: D, toPhase: FirResolvePhase): D
|
internal abstract fun <D : FirDeclaration> resolvedFirToPhase(declaration: D, toPhase: FirResolvePhase): D
|
||||||
|
|
||||||
// todo temporary, used only in completion
|
// todo temporary, used only in completion
|
||||||
abstract fun lazyResolveDeclarationForCompletion(
|
internal abstract fun lazyResolveDeclarationForCompletion(
|
||||||
firFunction: FirDeclaration,
|
firFunction: FirDeclaration,
|
||||||
containerFirFile: FirFile,
|
containerFirFile: FirFile,
|
||||||
firIdeProvider: FirProvider,
|
firIdeProvider: FirProvider,
|
||||||
toPhase: FirResolvePhase,
|
toPhase: FirResolvePhase,
|
||||||
towerDataContextCollector: FirTowerDataContextCollector
|
towerDataContextCollector: FirTowerDataContextCollector
|
||||||
)
|
)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
internal fun KtElement.firResolveState(): FirModuleResolveState =
|
|
||||||
FirIdeResolveStateService.getInstance(project).getResolveState(getModuleInfo())
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+25
-4
@@ -8,12 +8,20 @@ package org.jetbrains.kotlin.idea.fir.low.level.api.api
|
|||||||
import org.jetbrains.kotlin.diagnostics.Diagnostic
|
import org.jetbrains.kotlin.diagnostics.Diagnostic
|
||||||
import org.jetbrains.kotlin.fir.FirElement
|
import org.jetbrains.kotlin.fir.FirElement
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
|
import org.jetbrains.kotlin.idea.caches.project.IdeaModuleInfo
|
||||||
import org.jetbrains.kotlin.idea.caches.project.getModuleInfo
|
import org.jetbrains.kotlin.idea.caches.project.getModuleInfo
|
||||||
|
import org.jetbrains.kotlin.idea.fir.low.level.api.FirIdeResolveStateService
|
||||||
import org.jetbrains.kotlin.psi.KtElement
|
import org.jetbrains.kotlin.psi.KtElement
|
||||||
|
import org.jetbrains.kotlin.psi.KtFile
|
||||||
|
|
||||||
object LowLevelFirApiFacade {
|
object LowLevelFirApiFacade {
|
||||||
fun getResolveStateFor(element: KtElement): FirModuleResolveState =
|
fun getResolveStateFor(element: KtElement): FirModuleResolveState =
|
||||||
element.firResolveState()
|
getResolveStateFor(element.getModuleInfo())
|
||||||
|
|
||||||
|
fun getResolveStateFor(moduleInfo: IdeaModuleInfo): FirModuleResolveState =
|
||||||
|
FirIdeResolveStateService.getInstance(moduleInfo.project!!).getResolveState(moduleInfo)
|
||||||
|
|
||||||
fun getSessionFor(element: KtElement): FirSession =
|
fun getSessionFor(element: KtElement): FirSession =
|
||||||
getResolveStateFor(element).getSessionFor(element.getModuleInfo())
|
getResolveStateFor(element).getSessionFor(element.getModuleInfo())
|
||||||
@@ -21,7 +29,20 @@ object LowLevelFirApiFacade {
|
|||||||
fun getOrBuildFirFor(element: KtElement, resolveState: FirModuleResolveState): FirElement =
|
fun getOrBuildFirFor(element: KtElement, resolveState: FirModuleResolveState): FirElement =
|
||||||
resolveState.getOrBuildFirFor(element)
|
resolveState.getOrBuildFirFor(element)
|
||||||
|
|
||||||
fun getDiagnosticsFor(element: KtElement, resolveState: FirModuleResolveState): Collection<Diagnostic> {
|
fun getFirFile(ktFile: KtFile, resolveState: FirModuleResolveState) =
|
||||||
return resolveState.getDiagnostics(element)
|
resolveState.getFirFile(ktFile)
|
||||||
}
|
|
||||||
|
fun getDiagnosticsFor(element: KtElement, resolveState: FirModuleResolveState): Collection<Diagnostic> =
|
||||||
|
resolveState.getDiagnostics(element)
|
||||||
|
|
||||||
|
fun collectDiagnosticsForFile(ktFile: KtFile, resolveState: FirModuleResolveState): Collection<Diagnostic> =
|
||||||
|
resolveState.collectDiagnosticsForFile(ktFile)
|
||||||
|
|
||||||
|
fun <D : FirDeclaration> resolvedFirToPhase(
|
||||||
|
firDeclaration: D,
|
||||||
|
phase: FirResolvePhase,
|
||||||
|
resolveState: FirModuleResolveState
|
||||||
|
): D =
|
||||||
|
resolveState.resolvedFirToPhase(firDeclaration, phase)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.fir.expressions.FirExpression
|
|||||||
import org.jetbrains.kotlin.fir.resolve.calls.ImplicitReceiverValue
|
import org.jetbrains.kotlin.fir.resolve.calls.ImplicitReceiverValue
|
||||||
import org.jetbrains.kotlin.idea.fir.getOrBuildFirOfType
|
import org.jetbrains.kotlin.idea.fir.getOrBuildFirOfType
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.LowLevelFirApiFacade
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.LowLevelFirApiFacade
|
||||||
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.LowLevelFirApiFacadeForCompletion
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.resolver.ResolutionParameters
|
import org.jetbrains.kotlin.idea.fir.low.level.api.resolver.ResolutionParameters
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.resolver.SingleCandidateResolutionMode
|
import org.jetbrains.kotlin.idea.fir.low.level.api.resolver.SingleCandidateResolutionMode
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.resolver.SingleCandidateResolver
|
import org.jetbrains.kotlin.idea.fir.low.level.api.resolver.SingleCandidateResolver
|
||||||
@@ -67,7 +68,7 @@ internal class KtFirCompletionCandidateChecker(
|
|||||||
nameExpression: KtSimpleNameExpression,
|
nameExpression: KtSimpleNameExpression,
|
||||||
possibleExplicitReceiver: KtExpression?,
|
possibleExplicitReceiver: KtExpression?,
|
||||||
): Boolean {
|
): Boolean {
|
||||||
val file = firResolveState.getFirFile(originalFile)
|
val file = LowLevelFirApiFacade.getFirFile(originalFile, firResolveState)
|
||||||
val explicitReceiverExpression = possibleExplicitReceiver?.getOrBuildFirOfType<FirExpression>(firResolveState)
|
val explicitReceiverExpression = possibleExplicitReceiver?.getOrBuildFirOfType<FirExpression>(firResolveState)
|
||||||
val resolver = SingleCandidateResolver(firResolveState.rootModuleSession, file)
|
val resolver = SingleCandidateResolver(firResolveState.rootModuleSession, file)
|
||||||
val implicitReceivers = getImplicitReceivers(originalFile, file, nameExpression)
|
val implicitReceivers = getImplicitReceivers(originalFile, file, nameExpression)
|
||||||
|
|||||||
+1
-1
@@ -23,5 +23,5 @@ internal class KtFirDiagnosticProvider(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun collectDiagnosticsForFile(ktFile: KtFile): Collection<Diagnostic> =
|
override fun collectDiagnosticsForFile(ktFile: KtFile): Collection<Diagnostic> =
|
||||||
firResolveState.collectDiagnosticsForFile(ktFile)
|
LowLevelFirApiFacade.getDiagnosticsFor(ktFile, firResolveState)
|
||||||
}
|
}
|
||||||
+1
-1
@@ -128,7 +128,7 @@ internal class KtFirScopeProvider(
|
|||||||
originalFile: KtFile,
|
originalFile: KtFile,
|
||||||
positionInFakeFile: KtElement
|
positionInFakeFile: KtElement
|
||||||
): LowLevelFirApiFacadeForCompletion.FirCompletionContext {
|
): LowLevelFirApiFacadeForCompletion.FirCompletionContext {
|
||||||
val originalFirFile = firResolveState.getFirFile(originalFile)
|
val originalFirFile = LowLevelFirApiFacade.getFirFile(originalFile, firResolveState)
|
||||||
val declarationContext = EnclosingDeclarationContext.detect(originalFile, positionInFakeFile)
|
val declarationContext = EnclosingDeclarationContext.detect(originalFile, positionInFakeFile)
|
||||||
|
|
||||||
return declarationContext.buildCompletionContext(originalFirFile, firResolveState)
|
return declarationContext.buildCompletionContext(originalFirFile, firResolveState)
|
||||||
|
|||||||
+2
-1
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.idea.frontend.api.fir.utils
|
|||||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.FirModuleResolveState
|
||||||
|
import org.jetbrains.kotlin.idea.fir.low.level.api.api.LowLevelFirApiFacade
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityToken
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner
|
import org.jetbrains.kotlin.idea.frontend.api.ValidityTokenOwner
|
||||||
import org.jetbrains.kotlin.idea.frontend.api.assertIsValid
|
import org.jetbrains.kotlin.idea.frontend.api.assertIsValid
|
||||||
@@ -22,7 +23,7 @@ internal class FirRef<D : FirDeclaration>(fir: D, resolveState: FirModuleResolve
|
|||||||
val fir = firWeakRef.get() ?: error("FirElement was garbage collected while analysis session is still valid")
|
val fir = firWeakRef.get() ?: error("FirElement was garbage collected while analysis session is still valid")
|
||||||
val resolveState =
|
val resolveState =
|
||||||
resolveStateWeakRef.get() ?: error("FirModuleResolveState was garbage collected while analysis session is still valid")
|
resolveStateWeakRef.get() ?: error("FirModuleResolveState was garbage collected while analysis session is still valid")
|
||||||
return action(resolveState.resolvedFirToPhase(fir, phase))
|
return action(LowLevelFirApiFacade.resolvedFirToPhase(fir, phase, resolveState))
|
||||||
}
|
}
|
||||||
|
|
||||||
inline fun <R> withFirAndCache(phase: FirResolvePhase = FirResolvePhase.RAW_FIR, crossinline createValue: (fir: D) -> R) =
|
inline fun <R> withFirAndCache(phase: FirResolvePhase = FirResolvePhase.RAW_FIR, crossinline createValue: (fir: D) -> R) =
|
||||||
|
|||||||
Reference in New Issue
Block a user