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