FIR: Rename CallResolutionContext -> CandidateFactoriesAndCollectors

This commit is contained in:
Denis Zharkov
2020-03-27 18:17:10 +03:00
parent 4053978609
commit 80c64207f7
3 changed files with 29 additions and 26 deletions
@@ -20,19 +20,19 @@ class FirTowerResolver(
collector: CandidateCollector = this.collector,
manager: TowerResolveManager = this.manager
): CandidateCollector {
val callResolutionContext = buildCallResolutionContext(info, collector)
val candidateFactoriesAndCollectors = buildCandidateFactoriesAndCollectors(info, collector)
val towerResolverSession = FirTowerResolverSession(components, implicitReceiverValues, manager, callResolutionContext)
val towerResolverSession = FirTowerResolverSession(components, implicitReceiverValues, manager, candidateFactoriesAndCollectors)
towerResolverSession.runResolution(info)
manager.runTasks()
return collector
}
private fun buildCallResolutionContext(
private fun buildCandidateFactoriesAndCollectors(
info: CallInfo,
collector: CandidateCollector
): CallResolutionContext {
): CandidateFactoriesAndCollectors {
val candidateFactory = CandidateFactory(components, info)
val stubReceiverCandidateFactory =
if (info.callKind == CallKind.CallableReference && info.stubReceiver != null)
@@ -53,13 +53,13 @@ class FirTowerResolver(
}
}
return CallResolutionContext(
return CandidateFactoriesAndCollectors(
candidateFactory,
collector,
invokeReceiverCandidateFactory,
invokeBuiltinExtensionReceiverCandidateFactory,
stubReceiverCandidateFactory,
invokeReceiverCollector
invokeReceiverCandidateFactory,
invokeReceiverCollector,
invokeBuiltinExtensionReceiverCandidateFactory
)
}
@@ -38,7 +38,7 @@ class FirTowerResolverSession internal constructor(
val components: BodyResolveComponents,
implicitReceiverValues: List<ImplicitReceiverValue<*>>,
private val manager: TowerResolveManager,
private val callResolutionContext: CallResolutionContext,
private val candidateFactoriesAndCollectors: CandidateFactoriesAndCollectors,
) {
private data class ImplicitReceiver(
val receiver: ImplicitReceiverValue<*>,
@@ -94,7 +94,10 @@ class FirTowerResolverSession internal constructor(
LevelHandler(
)
return levelHandler.handleLevel(callInfo, explicitReceiverKind, group, callResolutionContext, towerLevel, invokeResolveMode) {
return levelHandler.handleLevel(
callInfo, explicitReceiverKind, group,
candidateFactoriesAndCollectors, towerLevel, invokeResolveMode
) {
enqueueResolverTasksForInvokeReceiverCandidates(
invokeResolveMode, callInfo
)
@@ -549,7 +552,7 @@ class FirTowerResolverSession internal constructor(
) {
val invokeBuiltinExtensionMode = invokeResolveMode == InvokeResolveMode.RECEIVER_FOR_INVOKE_BUILTIN_EXTENSION
for (invokeReceiverCandidate in callResolutionContext.invokeReceiverCollector!!.bestCandidates()) {
for (invokeReceiverCandidate in candidateFactoriesAndCollectors.invokeReceiverCollector!!.bestCandidates()) {
val symbol = invokeReceiverCandidate.symbol
if (symbol !is FirCallableSymbol<*> && symbol !is FirRegularClassSymbol) continue
@@ -584,7 +587,7 @@ class FirTowerResolverSession internal constructor(
}
val explicitReceiver = ExpressionReceiverValue(invokeReceiverExpression)
callResolutionContext.invokeOnGivenReceiverCandidateFactory = CandidateFactory(components, invokeFunctionInfo)
candidateFactoriesAndCollectors.invokeOnGivenReceiverCandidateFactory = CandidateFactory(components, invokeFunctionInfo)
enqueueResolverTasksForInvoke(
invokeFunctionInfo,
explicitReceiver,
@@ -17,13 +17,13 @@ import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.resolve.calls.tasks.ExplicitReceiverKind
import org.jetbrains.kotlin.types.AbstractTypeChecker
internal class CallResolutionContext(
internal class CandidateFactoriesAndCollectors(
val candidateFactory: CandidateFactory,
val resultCollector: CandidateCollector,
val invokeReceiverCandidateFactory: CandidateFactory?,
val invokeBuiltinExtensionReceiverCandidateFactory: CandidateFactory?,
val stubReceiverCandidateFactory: CandidateFactory?,
val invokeReceiverCollector: CandidateCollector?
val invokeReceiverCandidateFactory: CandidateFactory?,
val invokeReceiverCollector: CandidateCollector?,
val invokeBuiltinExtensionReceiverCandidateFactory: CandidateFactory?
) {
// TODO: Get rid of the property, storing state here looks like a hack
internal lateinit var invokeOnGivenReceiverCandidateFactory: CandidateFactory
@@ -40,12 +40,12 @@ internal class LevelHandler {
info: CallInfo,
explicitReceiverKind: ExplicitReceiverKind,
group: TowerGroup,
callResolutionContext: CallResolutionContext,
candidateFactoriesAndCollectors: CandidateFactoriesAndCollectors,
towerLevel: SessionBasedTowerLevel,
invokeResolveMode: InvokeResolveMode?,
enqueueResolverTasksForInvokeReceiverCandidates: EnqueueTasksForInvokeReceiverCandidates
): ProcessorAction {
val resultCollector = callResolutionContext.resultCollector
val resultCollector = candidateFactoriesAndCollectors.resultCollector
val processor =
TowerScopeLevelProcessor(
info.explicitReceiver,
@@ -53,9 +53,9 @@ internal class LevelHandler {
resultCollector,
// TODO: performance?
if (invokeResolveMode == InvokeResolveMode.IMPLICIT_CALL_ON_GIVEN_RECEIVER)
callResolutionContext.invokeOnGivenReceiverCandidateFactory
candidateFactoriesAndCollectors.invokeOnGivenReceiverCandidateFactory
else
callResolutionContext.candidateFactory,
candidateFactoriesAndCollectors.candidateFactory,
group
)
when (info.callKind) {
@@ -83,16 +83,16 @@ internal class LevelHandler {
val invokeReceiverProcessor = TowerScopeLevelProcessor(
info.explicitReceiver,
explicitReceiverKind,
callResolutionContext.invokeReceiverCollector!!,
if (invokeBuiltinExtensionMode) callResolutionContext.invokeBuiltinExtensionReceiverCandidateFactory!!
else callResolutionContext.invokeReceiverCandidateFactory!!,
candidateFactoriesAndCollectors.invokeReceiverCollector!!,
if (invokeBuiltinExtensionMode) candidateFactoriesAndCollectors.invokeBuiltinExtensionReceiverCandidateFactory!!
else candidateFactoriesAndCollectors.invokeReceiverCandidateFactory!!,
group
)
callResolutionContext.invokeReceiverCollector.newDataSet()
candidateFactoriesAndCollectors.invokeReceiverCollector.newDataSet()
towerLevel.processProperties(info.name, invokeReceiverProcessor)
towerLevel.processObjectsAsVariables(info.name, invokeReceiverProcessor)
if (callResolutionContext.invokeReceiverCollector.isSuccess()) {
if (candidateFactoriesAndCollectors.invokeReceiverCollector.isSuccess()) {
enqueueResolverTasksForInvokeReceiverCandidates()
}
}
@@ -108,7 +108,7 @@ internal class LevelHandler {
ExplicitReceiverKind.EXTENSION_RECEIVER
},
resultCollector,
callResolutionContext.stubReceiverCandidateFactory!!, group
candidateFactoriesAndCollectors.stubReceiverCandidateFactory!!, group
)
val towerLevelWithStubReceiver = towerLevel.replaceReceiverValue(stubReceiverValue)
towerLevelWithStubReceiver.processFunctionsAndProperties(info.name, stubProcessor)