FIR: Get rid of relation from LevelHandler to FirTowerResolver
This commit is contained in:
@@ -51,7 +51,7 @@ class FirCallResolver(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private val towerResolver = FirTowerResolver(
|
private val towerResolver = FirTowerResolver(
|
||||||
returnTypeCalculator, components, resolutionStageRunner,
|
components, resolutionStageRunner,
|
||||||
)
|
)
|
||||||
|
|
||||||
private val conflictResolver =
|
private val conflictResolver =
|
||||||
|
|||||||
@@ -6,11 +6,9 @@
|
|||||||
package org.jetbrains.kotlin.fir.resolve.calls
|
package org.jetbrains.kotlin.fir.resolve.calls
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.resolve.BodyResolveComponents
|
import org.jetbrains.kotlin.fir.resolve.BodyResolveComponents
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculator
|
|
||||||
|
|
||||||
class FirTowerResolver(
|
class FirTowerResolver(
|
||||||
val typeCalculator: ReturnTypeCalculator,
|
private val components: BodyResolveComponents,
|
||||||
val components: BodyResolveComponents,
|
|
||||||
resolutionStageRunner: ResolutionStageRunner,
|
resolutionStageRunner: ResolutionStageRunner,
|
||||||
) {
|
) {
|
||||||
private val collector = CandidateCollector(components, resolutionStageRunner)
|
private val collector = CandidateCollector(components, resolutionStageRunner)
|
||||||
@@ -61,8 +59,7 @@ class FirTowerResolver(
|
|||||||
invokeReceiverCandidateFactory,
|
invokeReceiverCandidateFactory,
|
||||||
invokeBuiltinExtensionReceiverCandidateFactory,
|
invokeBuiltinExtensionReceiverCandidateFactory,
|
||||||
stubReceiverCandidateFactory,
|
stubReceiverCandidateFactory,
|
||||||
invokeReceiverCollector,
|
invokeReceiverCollector
|
||||||
this
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+6
-1
@@ -83,7 +83,12 @@ class FirTowerResolverSession internal constructor(
|
|||||||
): ProcessorAction {
|
): ProcessorAction {
|
||||||
manager.requestGroup(group)
|
manager.requestGroup(group)
|
||||||
|
|
||||||
val result = with(LevelHandler(callInfo, explicitReceiverKind, group, callResolutionContext, manager, this)) {
|
val levelHandler =
|
||||||
|
LevelHandler(
|
||||||
|
callInfo, explicitReceiverKind, group,
|
||||||
|
callResolutionContext, manager, this, components
|
||||||
|
)
|
||||||
|
val result = with(levelHandler) {
|
||||||
towerLevel.handleLevel(invokeResolveMode)
|
towerLevel.handleLevel(invokeResolveMode)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+8
-8
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.resolve.calls
|
|||||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier
|
import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier
|
||||||
import org.jetbrains.kotlin.fir.expressions.builder.FirQualifiedAccessExpressionBuilder
|
import org.jetbrains.kotlin.fir.expressions.builder.FirQualifiedAccessExpressionBuilder
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.BodyResolveComponents
|
||||||
import org.jetbrains.kotlin.fir.resolve.constructType
|
import org.jetbrains.kotlin.fir.resolve.constructType
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformQualifiedAccessUsingSmartcastInfo
|
import org.jetbrains.kotlin.fir.resolve.transformQualifiedAccessUsingSmartcastInfo
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.firUnsafe
|
import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.firUnsafe
|
||||||
@@ -30,8 +31,7 @@ internal class CallResolutionContext(
|
|||||||
val invokeReceiverCandidateFactory: CandidateFactory?,
|
val invokeReceiverCandidateFactory: CandidateFactory?,
|
||||||
val invokeBuiltinExtensionReceiverCandidateFactory: CandidateFactory?,
|
val invokeBuiltinExtensionReceiverCandidateFactory: CandidateFactory?,
|
||||||
val stubReceiverCandidateFactory: CandidateFactory?,
|
val stubReceiverCandidateFactory: CandidateFactory?,
|
||||||
val invokeReceiverCollector: CandidateCollector?,
|
val invokeReceiverCollector: CandidateCollector?
|
||||||
val towerResolver: FirTowerResolver
|
|
||||||
) {
|
) {
|
||||||
// TODO: Get rid of the property, storing state here looks like a hack
|
// TODO: Get rid of the property, storing state here looks like a hack
|
||||||
internal lateinit var invokeOnGivenReceiverCandidateFactory: CandidateFactory
|
internal lateinit var invokeOnGivenReceiverCandidateFactory: CandidateFactory
|
||||||
@@ -43,11 +43,11 @@ internal class LevelHandler(
|
|||||||
private val group: TowerGroup,
|
private val group: TowerGroup,
|
||||||
private val callResolutionContext: CallResolutionContext,
|
private val callResolutionContext: CallResolutionContext,
|
||||||
private val manager: TowerResolveManager,
|
private val manager: TowerResolveManager,
|
||||||
private val towerResolverSession: FirTowerResolverSession
|
private val towerResolverSession: FirTowerResolverSession,
|
||||||
|
private val components: BodyResolveComponents
|
||||||
) {
|
) {
|
||||||
|
|
||||||
private val resultCollector: CandidateCollector get() = callResolutionContext.resultCollector
|
private val resultCollector: CandidateCollector get() = callResolutionContext.resultCollector
|
||||||
private val towerResolver: FirTowerResolver get() = callResolutionContext.towerResolver
|
|
||||||
|
|
||||||
private fun enqueueResolverTask(group: TowerGroup = TowerGroup.Start, task: suspend () -> Unit) =
|
private fun enqueueResolverTask(group: TowerGroup = TowerGroup.Start, task: suspend () -> Unit) =
|
||||||
manager.enqueueResolverTask(group, task)
|
manager.enqueueResolverTask(group, task)
|
||||||
@@ -55,7 +55,7 @@ internal class LevelHandler(
|
|||||||
private fun createExplicitReceiverForInvoke(candidate: Candidate): FirQualifiedAccessExpressionBuilder {
|
private fun createExplicitReceiverForInvoke(candidate: Candidate): FirQualifiedAccessExpressionBuilder {
|
||||||
val (name, typeRef) = when (val symbol = candidate.symbol) {
|
val (name, typeRef) = when (val symbol = candidate.symbol) {
|
||||||
is FirCallableSymbol<*> -> {
|
is FirCallableSymbol<*> -> {
|
||||||
symbol.callableId.callableName to towerResolver.typeCalculator.tryCalculateReturnType(symbol.firUnsafe())
|
symbol.callableId.callableName to components.returnTypeCalculator.tryCalculateReturnType(symbol.firUnsafe())
|
||||||
}
|
}
|
||||||
is FirRegularClassSymbol -> {
|
is FirRegularClassSymbol -> {
|
||||||
symbol.classId.shortClassName to buildResolvedTypeRef {
|
symbol.classId.shortClassName to buildResolvedTypeRef {
|
||||||
@@ -170,7 +170,7 @@ internal class LevelHandler(
|
|||||||
if (symbol !is FirCallableSymbol<*> && symbol !is FirRegularClassSymbol) continue
|
if (symbol !is FirCallableSymbol<*> && symbol !is FirRegularClassSymbol) continue
|
||||||
|
|
||||||
val isExtensionFunctionType =
|
val isExtensionFunctionType =
|
||||||
(symbol as? FirCallableSymbol<*>)?.fir?.returnTypeRef?.isExtensionFunctionType(towerResolver.components.session) == true
|
(symbol as? FirCallableSymbol<*>)?.fir?.returnTypeRef?.isExtensionFunctionType(components.session) == true
|
||||||
|
|
||||||
if (invokeBuiltinExtensionMode && !isExtensionFunctionType) {
|
if (invokeBuiltinExtensionMode && !isExtensionFunctionType) {
|
||||||
continue
|
continue
|
||||||
@@ -188,7 +188,7 @@ internal class LevelHandler(
|
|||||||
it.explicitReceiver = info.explicitReceiver
|
it.explicitReceiver = info.explicitReceiver
|
||||||
it.safe = info.isSafeCall
|
it.safe = info.isSafeCall
|
||||||
}
|
}
|
||||||
towerResolver.components.transformQualifiedAccessUsingSmartcastInfo(it.build())
|
components.transformQualifiedAccessUsingSmartcastInfo(it.build())
|
||||||
}
|
}
|
||||||
|
|
||||||
val invokeFunctionInfo =
|
val invokeFunctionInfo =
|
||||||
@@ -200,7 +200,7 @@ internal class LevelHandler(
|
|||||||
}
|
}
|
||||||
|
|
||||||
val explicitReceiver = ExpressionReceiverValue(invokeReceiverExpression)
|
val explicitReceiver = ExpressionReceiverValue(invokeReceiverExpression)
|
||||||
callResolutionContext.invokeOnGivenReceiverCandidateFactory = CandidateFactory(towerResolver.components, invokeFunctionInfo)
|
callResolutionContext.invokeOnGivenReceiverCandidateFactory = CandidateFactory(components, invokeFunctionInfo)
|
||||||
when {
|
when {
|
||||||
invokeBuiltinExtensionMode -> {
|
invokeBuiltinExtensionMode -> {
|
||||||
enqueueResolverTask {
|
enqueueResolverTask {
|
||||||
|
|||||||
Reference in New Issue
Block a user