[LL FIR] allow collecting tower data context for entire FirFile
Before, it was done only for import statements ^KT-57966
This commit is contained in:
committed by
Space Team
parent
8073e65162
commit
793cb02c7d
+8
-1
@@ -9,6 +9,7 @@ import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.util.PsiTreeUtil
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.DeclarationCopyBuilder.withBodyFrom
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.LLFirResolveSessionDepended
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.targets.LLFirWholeFileResolveTarget
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.FileTowerProvider
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.FirTowerContextProvider
|
||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.element.builder.FirTowerDataContextAllElementsCollector
|
||||
@@ -116,7 +117,13 @@ object LowLevelFirApiFacadeForResolveOnAir {
|
||||
require(firResolveSession is LLFirResolvableResolveSession)
|
||||
|
||||
return if (place is KtFile) {
|
||||
FileTowerProvider(place, onAirGetTowerContextForFile(firResolveSession, place))
|
||||
FirTowerDataContextAllElementsCollector().also { collector ->
|
||||
val session = firResolveSession.getSessionFor(place.getKtModule(firResolveSession.project)) as LLFirResolvableModuleSession
|
||||
val moduleComponents = session.moduleComponents
|
||||
val onAirFirFile = RawFirNonLocalDeclarationBuilder.buildNewFile(session, session.kotlinScopeProvider, place)
|
||||
val target = LLFirWholeFileResolveTarget(onAirFirFile)
|
||||
moduleComponents.firModuleLazyDeclarationResolver.lazyResolveTarget(target, FirResolvePhase.BODY_RESOLVE, collector)
|
||||
}
|
||||
} else {
|
||||
val validPlace = PsiTreeUtil.findFirstParent(place, false) {
|
||||
RawFirReplacement.isApplicableForReplacement(it as KtElement)
|
||||
|
||||
+9
@@ -61,6 +61,15 @@ internal class RawFirNonLocalDeclarationBuilder private constructor(
|
||||
}
|
||||
|
||||
companion object {
|
||||
fun buildNewFile(
|
||||
session: FirSession,
|
||||
scopeProvider: FirScopeProvider,
|
||||
file: KtFile,
|
||||
): FirFile {
|
||||
val builder = RawFirBuilder(session,scopeProvider, bodyBuildingMode = BodyBuildingMode.LAZY_BODIES)
|
||||
return builder.buildFirFile(file)
|
||||
}
|
||||
|
||||
fun buildNewSimpleFunction(
|
||||
session: FirSession,
|
||||
scopeProvider: FirScopeProvider,
|
||||
|
||||
Reference in New Issue
Block a user