From 36d3abad5174ad45375193d6beedac7abbc7cdaa Mon Sep 17 00:00:00 2001 From: Denis Zharkov Date: Fri, 27 Mar 2020 15:34:48 +0300 Subject: [PATCH] FIR: Get rid of relation from LevelHandler to FirTowerResolver --- .../org/jetbrains/kotlin/fir/FirCallResolver.kt | 2 +- .../kotlin/fir/resolve/calls/FirTowerResolver.kt | 7 ++----- .../fir/resolve/calls/FirTowerResolverSession.kt | 7 ++++++- .../fir/resolve/calls/TowerLevelHandler.kt | 16 ++++++++-------- 4 files changed, 17 insertions(+), 15 deletions(-) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt index 1ac699eef1b..bfe1a4c738e 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/FirCallResolver.kt @@ -51,7 +51,7 @@ class FirCallResolver( } private val towerResolver = FirTowerResolver( - returnTypeCalculator, components, resolutionStageRunner, + components, resolutionStageRunner, ) private val conflictResolver = diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirTowerResolver.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirTowerResolver.kt index 5181973c40c..8e8ebc98a86 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirTowerResolver.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirTowerResolver.kt @@ -6,11 +6,9 @@ package org.jetbrains.kotlin.fir.resolve.calls import org.jetbrains.kotlin.fir.resolve.BodyResolveComponents -import org.jetbrains.kotlin.fir.resolve.transformers.ReturnTypeCalculator class FirTowerResolver( - val typeCalculator: ReturnTypeCalculator, - val components: BodyResolveComponents, + private val components: BodyResolveComponents, resolutionStageRunner: ResolutionStageRunner, ) { private val collector = CandidateCollector(components, resolutionStageRunner) @@ -61,8 +59,7 @@ class FirTowerResolver( invokeReceiverCandidateFactory, invokeBuiltinExtensionReceiverCandidateFactory, stubReceiverCandidateFactory, - invokeReceiverCollector, - this + invokeReceiverCollector ) } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirTowerResolverSession.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirTowerResolverSession.kt index ef038a96f92..54c53f6a9f3 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirTowerResolverSession.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/FirTowerResolverSession.kt @@ -83,7 +83,12 @@ class FirTowerResolverSession internal constructor( ): ProcessorAction { 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) } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/TowerLevelHandler.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/TowerLevelHandler.kt index 1017e771dba..72e17ba5b98 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/TowerLevelHandler.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/TowerLevelHandler.kt @@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.resolve.calls import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier 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.transformQualifiedAccessUsingSmartcastInfo import org.jetbrains.kotlin.fir.resolve.transformers.body.resolve.firUnsafe @@ -30,8 +31,7 @@ internal class CallResolutionContext( val invokeReceiverCandidateFactory: CandidateFactory?, val invokeBuiltinExtensionReceiverCandidateFactory: CandidateFactory?, val stubReceiverCandidateFactory: CandidateFactory?, - val invokeReceiverCollector: CandidateCollector?, - val towerResolver: FirTowerResolver + val invokeReceiverCollector: CandidateCollector? ) { // TODO: Get rid of the property, storing state here looks like a hack internal lateinit var invokeOnGivenReceiverCandidateFactory: CandidateFactory @@ -43,11 +43,11 @@ internal class LevelHandler( private val group: TowerGroup, private val callResolutionContext: CallResolutionContext, 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 towerResolver: FirTowerResolver get() = callResolutionContext.towerResolver private fun enqueueResolverTask(group: TowerGroup = TowerGroup.Start, task: suspend () -> Unit) = manager.enqueueResolverTask(group, task) @@ -55,7 +55,7 @@ internal class LevelHandler( private fun createExplicitReceiverForInvoke(candidate: Candidate): FirQualifiedAccessExpressionBuilder { val (name, typeRef) = when (val symbol = candidate.symbol) { is FirCallableSymbol<*> -> { - symbol.callableId.callableName to towerResolver.typeCalculator.tryCalculateReturnType(symbol.firUnsafe()) + symbol.callableId.callableName to components.returnTypeCalculator.tryCalculateReturnType(symbol.firUnsafe()) } is FirRegularClassSymbol -> { symbol.classId.shortClassName to buildResolvedTypeRef { @@ -170,7 +170,7 @@ internal class LevelHandler( if (symbol !is FirCallableSymbol<*> && symbol !is FirRegularClassSymbol) continue val isExtensionFunctionType = - (symbol as? FirCallableSymbol<*>)?.fir?.returnTypeRef?.isExtensionFunctionType(towerResolver.components.session) == true + (symbol as? FirCallableSymbol<*>)?.fir?.returnTypeRef?.isExtensionFunctionType(components.session) == true if (invokeBuiltinExtensionMode && !isExtensionFunctionType) { continue @@ -188,7 +188,7 @@ internal class LevelHandler( it.explicitReceiver = info.explicitReceiver it.safe = info.isSafeCall } - towerResolver.components.transformQualifiedAccessUsingSmartcastInfo(it.build()) + components.transformQualifiedAccessUsingSmartcastInfo(it.build()) } val invokeFunctionInfo = @@ -200,7 +200,7 @@ internal class LevelHandler( } val explicitReceiver = ExpressionReceiverValue(invokeReceiverExpression) - callResolutionContext.invokeOnGivenReceiverCandidateFactory = CandidateFactory(towerResolver.components, invokeFunctionInfo) + callResolutionContext.invokeOnGivenReceiverCandidateFactory = CandidateFactory(components, invokeFunctionInfo) when { invokeBuiltinExtensionMode -> { enqueueResolverTask {