FIR: Prepare body transformers for local classes resolution
- Add outerBodyResolveContext - Rename FirImplicitBodyResolveTransformer and generalize because it will be used for full body resolution on local classes
This commit is contained in:
+3
-2
@@ -26,11 +26,12 @@ open class FirBodyResolveTransformer(
|
|||||||
phase: FirResolvePhase,
|
phase: FirResolvePhase,
|
||||||
override var implicitTypeOnly: Boolean,
|
override var implicitTypeOnly: Boolean,
|
||||||
scopeSession: ScopeSession,
|
scopeSession: ScopeSession,
|
||||||
val returnTypeCalculator: ReturnTypeCalculator = ReturnTypeCalculatorForFullBodyResolve()
|
val returnTypeCalculator: ReturnTypeCalculator = ReturnTypeCalculatorForFullBodyResolve(),
|
||||||
|
outerBodyResolveContext: BodyResolveContext? = null
|
||||||
) : FirAbstractBodyResolveTransformer(phase) {
|
) : FirAbstractBodyResolveTransformer(phase) {
|
||||||
private var packageFqName = FqName.ROOT
|
private var packageFqName = FqName.ROOT
|
||||||
|
|
||||||
final override val context: BodyResolveContext = BodyResolveContext(returnTypeCalculator)
|
final override val context: BodyResolveContext = outerBodyResolveContext ?: BodyResolveContext(returnTypeCalculator)
|
||||||
final override val components: BodyResolveTransformerComponents =
|
final override val components: BodyResolveTransformerComponents =
|
||||||
BodyResolveTransformerComponents(session, scopeSession, this, context)
|
BodyResolveTransformerComponents(session, scopeSession, this, context)
|
||||||
|
|
||||||
|
|||||||
+26
-12
@@ -38,11 +38,14 @@ class FirImplicitTypeBodyResolveTransformerAdapter(private val scopeSession: Sco
|
|||||||
|
|
||||||
override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult<FirFile> {
|
override fun transformFile(file: FirFile, data: Nothing?): CompositeTransformResult<FirFile> {
|
||||||
val session = file.session
|
val session = file.session
|
||||||
scopeSession.returnTypeCalculator = ReturnTypeCalculatorWithJump(session, scopeSession, implicitBodyResolveComputationSession)
|
val returnTypeCalculator = ReturnTypeCalculatorWithJump(session, scopeSession, implicitBodyResolveComputationSession)
|
||||||
val transformer = FirImplicitBodyResolveTransformer(
|
scopeSession.returnTypeCalculator = returnTypeCalculator
|
||||||
|
val transformer = FirImplicitAwareBodyResolveTransformer(
|
||||||
session,
|
session,
|
||||||
scopeSession,
|
scopeSession,
|
||||||
implicitBodyResolveComputationSession
|
implicitBodyResolveComputationSession,
|
||||||
|
FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE, implicitTypeOnly = true,
|
||||||
|
returnTypeCalculator
|
||||||
)
|
)
|
||||||
return file.transform(transformer, ResolutionMode.ContextIndependent)
|
return file.transform(transformer, ResolutionMode.ContextIndependent)
|
||||||
}
|
}
|
||||||
@@ -51,16 +54,21 @@ class FirImplicitTypeBodyResolveTransformerAdapter(private val scopeSession: Sco
|
|||||||
fun createReturnTypeCalculatorForIDE(session: FirSession, scopeSession: ScopeSession): ReturnTypeCalculator =
|
fun createReturnTypeCalculatorForIDE(session: FirSession, scopeSession: ScopeSession): ReturnTypeCalculator =
|
||||||
ReturnTypeCalculatorWithJump(session, scopeSession, ImplicitBodyResolveComputationSession())
|
ReturnTypeCalculatorWithJump(session, scopeSession, ImplicitBodyResolveComputationSession())
|
||||||
|
|
||||||
private open class FirImplicitBodyResolveTransformer(
|
private open class FirImplicitAwareBodyResolveTransformer(
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
scopeSession: ScopeSession,
|
scopeSession: ScopeSession,
|
||||||
private val implicitBodyResolveComputationSession: ImplicitBodyResolveComputationSession
|
private val implicitBodyResolveComputationSession: ImplicitBodyResolveComputationSession,
|
||||||
|
phase: FirResolvePhase,
|
||||||
|
implicitTypeOnly: Boolean,
|
||||||
|
returnTypeCalculator: ReturnTypeCalculator,
|
||||||
|
outerBodyResolveContext: BodyResolveContext? = null
|
||||||
) : FirBodyResolveTransformer(
|
) : FirBodyResolveTransformer(
|
||||||
session,
|
session,
|
||||||
phase = FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE,
|
phase,
|
||||||
implicitTypeOnly = true,
|
implicitTypeOnly,
|
||||||
scopeSession = scopeSession,
|
scopeSession,
|
||||||
returnTypeCalculator = ReturnTypeCalculatorWithJump(session, scopeSession, implicitBodyResolveComputationSession)
|
returnTypeCalculator,
|
||||||
|
outerBodyResolveContext
|
||||||
) {
|
) {
|
||||||
override fun transformSimpleFunction(
|
override fun transformSimpleFunction(
|
||||||
simpleFunction: FirSimpleFunction,
|
simpleFunction: FirSimpleFunction,
|
||||||
@@ -179,11 +187,17 @@ private class FirDesignatedBodyResolveTransformerForReturnTypeCalculator(
|
|||||||
private val designation: Iterator<FirElement>,
|
private val designation: Iterator<FirElement>,
|
||||||
session: FirSession,
|
session: FirSession,
|
||||||
scopeSession: ScopeSession,
|
scopeSession: ScopeSession,
|
||||||
implicitBodyResolveComputationSession: ImplicitBodyResolveComputationSession
|
implicitBodyResolveComputationSession: ImplicitBodyResolveComputationSession,
|
||||||
) : FirImplicitBodyResolveTransformer(
|
returnTypeCalculator: ReturnTypeCalculator,
|
||||||
|
outerBodyResolveContext: BodyResolveContext? = null
|
||||||
|
) : FirImplicitAwareBodyResolveTransformer(
|
||||||
session,
|
session,
|
||||||
scopeSession,
|
scopeSession,
|
||||||
implicitBodyResolveComputationSession
|
implicitBodyResolveComputationSession,
|
||||||
|
FirResolvePhase.IMPLICIT_TYPES_BODY_RESOLVE,
|
||||||
|
implicitTypeOnly = true,
|
||||||
|
returnTypeCalculator,
|
||||||
|
outerBodyResolveContext
|
||||||
) {
|
) {
|
||||||
|
|
||||||
var lastResult: FirElement? = null
|
var lastResult: FirElement? = null
|
||||||
|
|||||||
Reference in New Issue
Block a user