FIR IDE: Collect scopes in FirDesignatedImplicitTypesTransformerForIDE

We need this to capture scopes for properties
with initializers (like `val a = 10`)
This commit is contained in:
Roman Golyshev
2020-12-28 15:47:52 +03:00
committed by Space
parent 445edf8e28
commit b51b8b59b1
2 changed files with 12 additions and 1 deletions
@@ -186,6 +186,7 @@ internal class FirLazyDeclarationResolver(
targetDeclaration, targetDeclaration,
containerFirFile.session, containerFirFile.session,
scopeSession, scopeSession,
towerDataContextCollector,
) )
FirResolvePhase.BODY_RESOLVE -> FirDesignatedBodyResolveTransformerForIDE( FirResolvePhase.BODY_RESOLVE -> FirDesignatedBodyResolveTransformerForIDE(
designation.iterator(), designation.iterator(),
@@ -5,10 +5,10 @@
package org.jetbrains.kotlin.idea.fir.low.level.api.trasformers package org.jetbrains.kotlin.idea.fir.low.level.api.trasformers
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.FirDeclaration
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
import org.jetbrains.kotlin.fir.expressions.FirStatement
import org.jetbrains.kotlin.fir.resolve.ResolutionMode import org.jetbrains.kotlin.fir.resolve.ResolutionMode
import org.jetbrains.kotlin.fir.resolve.ScopeSession import org.jetbrains.kotlin.fir.resolve.ScopeSession
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirImplicitAwareBodyResolveTransformer import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.FirImplicitAwareBodyResolveTransformer
@@ -17,12 +17,14 @@ import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.createReturnTy
import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult import org.jetbrains.kotlin.fir.visitors.CompositeTransformResult
import org.jetbrains.kotlin.fir.visitors.compose import org.jetbrains.kotlin.fir.visitors.compose
import org.jetbrains.kotlin.idea.fir.low.level.api.element.builder.FirIdeDesignatedBodyResolveTransformerForReturnTypeCalculator import org.jetbrains.kotlin.idea.fir.low.level.api.element.builder.FirIdeDesignatedBodyResolveTransformerForReturnTypeCalculator
import org.jetbrains.kotlin.idea.fir.low.level.api.element.builder.FirTowerDataContextCollector
internal class FirDesignatedImplicitTypesTransformerForIDE( internal class FirDesignatedImplicitTypesTransformerForIDE(
private val designation: Iterator<FirDeclaration>, private val designation: Iterator<FirDeclaration>,
targetDeclaration: FirDeclaration, targetDeclaration: FirDeclaration,
session: FirSession, session: FirSession,
scopeSession: ScopeSession, scopeSession: ScopeSession,
private val towerDataContextCollector: FirTowerDataContextCollector?,
implicitBodyResolveComputationSession: ImplicitBodyResolveComputationSession = ImplicitBodyResolveComputationSession(), implicitBodyResolveComputationSession: ImplicitBodyResolveComputationSession = ImplicitBodyResolveComputationSession(),
) : FirImplicitAwareBodyResolveTransformer( ) : FirImplicitAwareBodyResolveTransformer(
session, session,
@@ -48,4 +50,12 @@ internal class FirDesignatedImplicitTypesTransformerForIDE(
} }
override fun needReplacePhase(firDeclaration: FirDeclaration): Boolean = phaseReplaceOracle.needReplacePhase(firDeclaration) override fun needReplacePhase(firDeclaration: FirDeclaration): Boolean = phaseReplaceOracle.needReplacePhase(firDeclaration)
override fun onBeforeStatementResolution(statement: FirStatement) {
towerDataContextCollector?.addStatementContext(statement, context.towerDataContext)
}
override fun onBeforeDeclarationContentResolve(declaration: FirDeclaration) {
towerDataContextCollector?.addDeclarationContext(declaration, context.towerDataContext)
}
} }