From 83a82cdd048e88bee5e734f6ec24ebf1caf11ba2 Mon Sep 17 00:00:00 2001 From: Stanislav Erokhin Date: Fri, 2 Sep 2016 16:09:35 +0300 Subject: [PATCH] Refactoring. Remove descriptor from resolution Candidate. --- .../calls/tower/NewResolutionOldInference.kt | 5 +--- .../resolve/calls/tower/InvokeProcessors.kt | 10 +++---- .../calls/tower/ScopeTowerProcessors.kt | 29 ++++++++++--------- .../resolve/calls/tower/TowerResolver.kt | 12 ++++---- 4 files changed, 26 insertions(+), 30 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/NewResolutionOldInference.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/NewResolutionOldInference.kt index 5c6ec1d90f3..892bdf5e2ec 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/NewResolutionOldInference.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/NewResolutionOldInference.kt @@ -321,10 +321,7 @@ class NewResolutionOldInference( internal data class MyCandidate( val candidateStatus: ResolutionCandidateStatus, val resolvedCall: MutableResolvedCall<@UnsafeVariance D> - ) : Candidate { - override val descriptor: D - get() = resolvedCall.candidateDescriptor - + ) : Candidate { override val isSuccessful: Boolean get() = candidateStatus.resultingApplicability.isSuccess override val status: ResolutionCandidateStatus diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/tower/InvokeProcessors.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/tower/InvokeProcessors.kt index f9af73f9941..f68376283eb 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/tower/InvokeProcessors.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/tower/InvokeProcessors.kt @@ -27,7 +27,7 @@ import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValueWithSmartCastI import org.jetbrains.kotlin.util.OperatorNameConventions import java.util.* -abstract class AbstractInvokeTowerProcessor, V : Candidate>( +abstract class AbstractInvokeTowerProcessor( protected val factoryProviderForInvoke: CandidateFactoryProviderForInvoke, private val variableProcessor: ScopeTowerProcessor ) : ScopeTowerProcessor { @@ -86,7 +86,7 @@ abstract class AbstractInvokeTowerProcessor, V } // todo KT-9522 Allow invoke convention for synthetic property -class InvokeTowerProcessor, V : Candidate>( +class InvokeTowerProcessor( val scopeTower: ImplicitScopeTower, val name: Name, factoryProviderForInvoke: CandidateFactoryProviderForInvoke, @@ -104,7 +104,7 @@ class InvokeTowerProcessor, V : Candidate, V : Candidate>( +class InvokeExtensionTowerProcessor( val scopeTower: ImplicitScopeTower, val name: Name, factoryProviderForInvoke: CandidateFactoryProviderForInvoke, @@ -123,7 +123,7 @@ class InvokeExtensionTowerProcessor, V : Candi } } -private class InvokeExtensionScopeTowerProcessor>( +private class InvokeExtensionScopeTowerProcessor( context: CandidateFactory, private val invokeCandidateDescriptor: CandidateWithBoundDispatchReceiver, private val explicitReceiver: ReceiverValueWithSmartCastInfo? @@ -159,7 +159,7 @@ private fun ImplicitScopeTower.getExtensionInvokeCandidateDescriptor( } // case 1.(foo())() or (foo())() -fun > createCallTowerProcessorForExplicitInvoke( +fun createCallTowerProcessorForExplicitInvoke( scopeTower: ImplicitScopeTower, functionContext: CandidateFactory, expressionForInvoke: ReceiverValueWithSmartCastInfo, diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/tower/ScopeTowerProcessors.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/tower/ScopeTowerProcessors.kt index 3081a6b6762..9c32ad92084 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/tower/ScopeTowerProcessors.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/tower/ScopeTowerProcessors.kt @@ -39,7 +39,7 @@ class CompositeScopeTowerProcessor( override fun process(data: TowerData): List> = processors.flatMap { it.process(data) } } -internal abstract class AbstractSimpleScopeTowerProcessor>( +internal abstract class AbstractSimpleScopeTowerProcessor( val candidateFactory: CandidateFactory ) : ScopeTowerProcessor { @@ -51,7 +51,7 @@ internal abstract class AbstractSimpleScopeTowerProcessor = ScopeTowerLevel.(extensionReceiver: ReceiverValueWithSmartCastInfo?) -> Collection> -internal class ExplicitReceiverScopeTowerProcessor>( +internal class ExplicitReceiverScopeTowerProcessor( val scopeTower: ImplicitScopeTower, context: CandidateFactory, val explicitReceiver: ReceiverValueWithSmartCastInfo, @@ -78,7 +78,7 @@ internal class ExplicitReceiverScopeTowerProcessor>( +private class QualifierScopeTowerProcessor( val scopeTower: ImplicitScopeTower, context: CandidateFactory, val qualifier: QualifierReceiver, @@ -94,7 +94,7 @@ private class QualifierScopeTowerProcessor>( +private class NoExplicitReceiverScopeTowerProcessor( context: CandidateFactory, val collectCandidates: CandidatesCollector ) : AbstractSimpleScopeTowerProcessor(context) { @@ -120,7 +120,8 @@ private class NoExplicitReceiverScopeTowerProcessor> processCommonAndSyntheticMembers( + +private fun processCommonAndSyntheticMembers( receiverForMember: ReceiverValueWithSmartCastInfo, scopeTowerLevel: ScopeTowerLevel, collectCandidates: CandidatesCollector, @@ -149,7 +150,7 @@ private fun > processCommonAndSynthetic } } -private fun > createSimpleProcessor( +private fun createSimpleProcessor( scopeTower: ImplicitScopeTower, context: CandidateFactory, explicitReceiver: DetailedReceiver?, @@ -178,23 +179,23 @@ private fun > createSimpleProcessor( } } -fun > createVariableProcessor(scopeTower: ImplicitScopeTower, name: Name, - context: CandidateFactory, explicitReceiver: DetailedReceiver?, classValueReceiver: Boolean = true +fun createVariableProcessor(scopeTower: ImplicitScopeTower, name: Name, + context: CandidateFactory, explicitReceiver: DetailedReceiver?, classValueReceiver: Boolean = true ) = createSimpleProcessor(scopeTower, context, explicitReceiver, classValueReceiver) { getVariables(name, it) } -fun > createVariableAndObjectProcessor(scopeTower: ImplicitScopeTower, name: Name, - context: CandidateFactory, explicitReceiver: DetailedReceiver?, classValueReceiver: Boolean = true +fun createVariableAndObjectProcessor(scopeTower: ImplicitScopeTower, name: Name, + context: CandidateFactory, explicitReceiver: DetailedReceiver?, classValueReceiver: Boolean = true ) = CompositeScopeTowerProcessor( createVariableProcessor(scopeTower, name, context, explicitReceiver), createSimpleProcessor(scopeTower, context, explicitReceiver, classValueReceiver) { getObjects(name, it) } ) -fun > createSimpleFunctionProcessor(scopeTower: ImplicitScopeTower, name: Name, - context: CandidateFactory, explicitReceiver: DetailedReceiver?, classValueReceiver: Boolean = true +fun createSimpleFunctionProcessor(scopeTower: ImplicitScopeTower, name: Name, + context: CandidateFactory, explicitReceiver: DetailedReceiver?, classValueReceiver: Boolean = true ) = createSimpleProcessor(scopeTower, context, explicitReceiver, classValueReceiver) { getFunctions(name, it) } -fun , V: Candidate> createFunctionProcessor( +fun createFunctionProcessor( scopeTower: ImplicitScopeTower, name: Name, simpleContext: CandidateFactory, @@ -217,7 +218,7 @@ fun , V: Candidate> createF } -fun > createProcessorWithReceiverValueOrEmpty( +fun createProcessorWithReceiverValueOrEmpty( explicitReceiver: DetailedReceiver?, create: (ReceiverValueWithSmartCastInfo?) -> ScopeTowerProcessor ): ScopeTowerProcessor { diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/tower/TowerResolver.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/tower/TowerResolver.kt index 7cc37cfe3f9..a522b0f7c06 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/tower/TowerResolver.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/tower/TowerResolver.kt @@ -27,16 +27,14 @@ import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValueWithSmartCastI import org.jetbrains.kotlin.resolve.scopes.utils.parentsWithSelf import java.util.* -interface Candidate { - val descriptor: D - +interface Candidate { // this operation should be very fast val isSuccessful: Boolean val status: ResolutionCandidateStatus } -interface CandidateFactory> { +interface CandidateFactory { fun createCandidate( towerCandidate: CandidateWithBoundDispatchReceiver, explicitReceiverKind: ExplicitReceiverKind, @@ -44,7 +42,7 @@ interface CandidateFactory> { ): C } -interface CandidateFactoryProviderForInvoke, V : Candidate> { +interface CandidateFactoryProviderForInvoke { fun transformCandidate(variable: V, invoke: F): F @@ -69,13 +67,13 @@ interface ScopeTowerProcessor { } class TowerResolver { - fun > runResolve( + fun runResolve( scopeTower: ImplicitScopeTower, processor: ScopeTowerProcessor, useOrder: Boolean ): Collection = scopeTower.run(processor, SuccessfulResultCollector { it.status }, useOrder) - fun > collectAllCandidates( + fun collectAllCandidates( scopeTower: ImplicitScopeTower, processor: ScopeTowerProcessor ): Collection