FIR: Add collecting top-level scopes of the file
It will be useful in the completion when we need to dicide if we need to import FQN or not
This commit is contained in:
+4
@@ -49,6 +49,8 @@ open class FirBodyResolveTransformer(
|
||||
override fun transformFile(file: FirFile, data: ResolutionMode): CompositeTransformResult<FirFile> {
|
||||
checkSessionConsistency(file)
|
||||
return context.withFile(file, components) {
|
||||
onBeforeFileContentResolution(file)
|
||||
|
||||
file.replaceResolvePhase(transformerPhase)
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
transformDeclarationContent(file, data) as CompositeTransformResult<FirFile>
|
||||
@@ -73,6 +75,8 @@ open class FirBodyResolveTransformer(
|
||||
return data.expectedTypeRef.compose()
|
||||
}
|
||||
|
||||
open fun onBeforeFileContentResolution(file: FirFile) {}
|
||||
|
||||
open fun onBeforeStatementResolution(statement: FirStatement) {}
|
||||
|
||||
open fun onBeforeDeclarationContentResolve(declaration: FirDeclaration) {}
|
||||
|
||||
+3
@@ -50,6 +50,9 @@ interface KtScopeProviderMixIn : KtAnalysisSessionMixIn {
|
||||
|
||||
fun KtFile.getScopeContextForPosition(positionInFakeFile: KtElement): KtScopeContext =
|
||||
analysisSession.scopeProvider.getScopeContextForPosition(this, positionInFakeFile)
|
||||
|
||||
fun KtFile.getScopeContextForFile(): KtScopeContext =
|
||||
analysisSession.scopeProvider.getScopeContextForPosition(this, this)
|
||||
}
|
||||
|
||||
data class KtScopeContext(val scopes: KtCompositeScope, val implicitReceiversTypes: List<KtType>)
|
||||
|
||||
+6
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.idea.fir.low.level.api.element.builder
|
||||
import com.intellij.psi.PsiElement
|
||||
import org.jetbrains.kotlin.fir.ThreadSafeMutableState
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||
import org.jetbrains.kotlin.fir.expressions.FirStatement
|
||||
import org.jetbrains.kotlin.fir.psi
|
||||
import org.jetbrains.kotlin.fir.resolve.FirTowerDataContext
|
||||
@@ -17,6 +18,11 @@ import org.jetbrains.kotlin.psi.*
|
||||
class FirTowerDataContextCollector {
|
||||
private val state: MutableMap<KtElement, FirTowerDataContext> = hashMapOf()
|
||||
|
||||
fun addFileContext(file: FirFile, context: FirTowerDataContext) {
|
||||
val ktFile = file.psi as? KtFile ?: return
|
||||
state[ktFile] = context
|
||||
}
|
||||
|
||||
fun addStatementContext(statement: FirStatement, context: FirTowerDataContext) {
|
||||
val closestStatementInBlock = statement.psi?.closestBlockLevelOrInitializerExpression() ?: return
|
||||
state[closestStatementInBlock] = context
|
||||
|
||||
+5
@@ -7,6 +7,7 @@ package org.jetbrains.kotlin.idea.fir.low.level.api.trasformers
|
||||
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.FirDeclaration
|
||||
import org.jetbrains.kotlin.fir.declarations.FirFile
|
||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||
import org.jetbrains.kotlin.fir.expressions.FirStatement
|
||||
import org.jetbrains.kotlin.fir.resolve.ResolutionMode
|
||||
@@ -44,6 +45,10 @@ internal class FirDesignatedBodyResolveTransformerForIDE(
|
||||
super.transformDeclarationContent(declaration, data)
|
||||
}
|
||||
|
||||
override fun onBeforeFileContentResolution(file: FirFile) {
|
||||
towerDataContextCollector?.addFileContext(file, context.towerDataContext)
|
||||
}
|
||||
|
||||
override fun onBeforeDeclarationContentResolve(declaration: FirDeclaration) {
|
||||
towerDataContextCollector?.addDeclarationContext(declaration, context.towerDataContext)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user