[LL FIR] Simplify imports resolve
This commit is contained in:
+6
-24
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.analysis.low.level.api.fir.sessions.llFirSession
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.transformers.LLFirFirProviderInterceptor
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.transformers.LLFirLazyTransformerExecutor
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.checkCanceled
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.getContainingFile
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.withFirEntry
|
||||
import org.jetbrains.kotlin.analysis.utils.errors.rethrowExceptionWithDetails
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
@@ -25,7 +26,6 @@ import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticProperty
|
||||
import org.jetbrains.kotlin.fir.declarations.synthetic.FirSyntheticPropertyAccessor
|
||||
import org.jetbrains.kotlin.fir.resolve.ScopeSession
|
||||
import org.jetbrains.kotlin.fir.resolve.providers.firProvider
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.FirImportResolveTransformer
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirTowerDataContextCollector
|
||||
import org.jetbrains.kotlin.psi.KtClassBody
|
||||
@@ -69,7 +69,9 @@ internal class LLFirModuleLazyDeclarationResolver(val moduleComponents: LLFirMod
|
||||
else -> throwUnexpectedFirElementError(this)
|
||||
}
|
||||
|
||||
private fun resolveFileToImports(firFile: FirFile) {
|
||||
private fun resolveContainingFileToImports(target: FirElementWithResolvePhase) {
|
||||
if (target.resolvePhase >= FirResolvePhase.IMPORTS) return
|
||||
val firFile = target.getContainingFile() ?: return
|
||||
if (firFile.resolvePhase >= FirResolvePhase.IMPORTS) return
|
||||
moduleComponents.globalResolveComponents.lockProvider.runCustomResolveUnderLock(firFile) {
|
||||
resolveFileToImportsWithoutLock(firFile)
|
||||
@@ -83,19 +85,6 @@ internal class LLFirModuleLazyDeclarationResolver(val moduleComponents: LLFirMod
|
||||
firFile.replaceResolvePhase(FirResolvePhase.IMPORTS)
|
||||
}
|
||||
|
||||
|
||||
private fun fastTrackForImportsPhase(target: FirElementWithResolvePhase): Boolean {
|
||||
val provider = target.moduleData.session.firProvider
|
||||
val firFile = when (target) {
|
||||
is FirFile -> target
|
||||
is FirCallableDeclaration -> provider.getFirCallableContainerFile(target.symbol)
|
||||
is FirClassLikeDeclaration -> provider.getFirClassifierContainerFile(target.symbol)
|
||||
else -> null
|
||||
} ?: return false
|
||||
resolveFileToImports(firFile)
|
||||
return true
|
||||
}
|
||||
|
||||
/**
|
||||
* Run designated resolve only designation with fully resolved path (synchronized).
|
||||
* Suitable for body resolve or/and on-air resolve.
|
||||
@@ -121,11 +110,8 @@ internal class LLFirModuleLazyDeclarationResolver(val moduleComponents: LLFirMod
|
||||
toPhase: FirResolvePhase,
|
||||
) {
|
||||
if (target.resolvePhase >= toPhase) return
|
||||
if (toPhase == FirResolvePhase.IMPORTS) {
|
||||
if (fastTrackForImportsPhase(target)) {
|
||||
return
|
||||
}
|
||||
}
|
||||
resolveContainingFileToImports(target)
|
||||
if (toPhase == FirResolvePhase.IMPORTS) return
|
||||
|
||||
for (designation in declarationDesignationsToResolve(target)) {
|
||||
if (!designation.target.isValidForResolve()) continue
|
||||
@@ -166,10 +152,6 @@ internal class LLFirModuleLazyDeclarationResolver(val moduleComponents: LLFirMod
|
||||
scopeSession: ScopeSession,
|
||||
toPhase: FirResolvePhase,
|
||||
) {
|
||||
if (toPhase == FirResolvePhase.RAW_FIR) return
|
||||
resolveFileToImportsWithoutLock(designation.firFile)
|
||||
if (toPhase == FirResolvePhase.IMPORTS) return
|
||||
|
||||
val declarationResolvePhase = designation.target.resolvePhase
|
||||
if (declarationResolvePhase >= toPhase) return
|
||||
|
||||
|
||||
+1
-1
@@ -22,7 +22,7 @@ fun FirElementWithResolvePhase.getContainingFile(): FirFile? {
|
||||
is FirPropertyAccessor -> propertySymbol.fir.getContainingFile()
|
||||
is FirValueParameter -> containingFunctionSymbol.fir.getContainingFile()
|
||||
is FirCallableDeclaration -> provider.getFirCallableContainerFile(symbol)
|
||||
is FirClassLikeDeclaration -> provider.getFirClassifierContainerFile(symbol)
|
||||
is FirClassLikeDeclaration -> provider.getFirClassifierContainerFileIfAny(symbol)
|
||||
is FirDanglingModifierList -> {
|
||||
val ktFile = psi?.containingFile as? KtFile
|
||||
?: error("File for dangling modifier list cannot be null")
|
||||
|
||||
Reference in New Issue
Block a user