From 0072d6004af5093edaead005fdb5121138f3295c Mon Sep 17 00:00:00 2001 From: Stanislav Erokhin Date: Fri, 26 Aug 2016 14:33:02 +0300 Subject: [PATCH] Refactoring: rename TowerContext to CandidatesFactory, InvokeTowerContext to CandidateFactoryProviderForInvoke. --- .../calls/tower/NewResolutionOldInference.kt | 40 +++++++++---------- .../resolve/calls/tower/InvokeProcessors.kt | 24 +++++------ .../calls/tower/ScopeTowerProcessors.kt | 24 +++++------ .../resolve/calls/tower/TowerResolver.kt | 8 ++-- 4 files changed, 48 insertions(+), 48 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 0ff062f1532..32bc0ea5d64 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 @@ -77,8 +77,8 @@ class NewResolutionOldInference( outer: NewResolutionOldInference, name: Name, tracing: TracingStrategy, scopeTower: ImplicitScopeTower, explicitReceiver: DetailedReceiver?, context: BasicCallResolutionContext ): ScopeTowerProcessor> { - val functionContext = outer.SimpleContext(name, context, tracing) - return createFunctionProcessor(scopeTower, name, functionContext, outer.InvokeContext(functionContext), explicitReceiver) + val functionFactory = outer.CandidateFactoryImpl(name, context, tracing) + return createFunctionProcessor(scopeTower, name, functionFactory, outer.CandidateFactoryProviderForInvokeImpl(functionFactory), explicitReceiver) } } @@ -87,8 +87,8 @@ class NewResolutionOldInference( outer: NewResolutionOldInference, name: Name, tracing: TracingStrategy, scopeTower: ImplicitScopeTower, explicitReceiver: DetailedReceiver?, context: BasicCallResolutionContext ): ScopeTowerProcessor> { - val simpleContext = outer.SimpleContext(name, context, tracing) - return createVariableAndObjectProcessor(scopeTower, name, simpleContext, explicitReceiver) + val variableFactory = outer.CandidateFactoryImpl(name, context, tracing) + return createVariableAndObjectProcessor(scopeTower, name, variableFactory, explicitReceiver) } } @@ -97,11 +97,11 @@ class NewResolutionOldInference( outer: NewResolutionOldInference, name: Name, tracing: TracingStrategy, scopeTower: ImplicitScopeTower, explicitReceiver: DetailedReceiver?, context: BasicCallResolutionContext ): ScopeTowerProcessor> { - val simpleContextF = outer.SimpleContext(name, context, tracing) - val simpleContextV = outer.SimpleContext(name, context, tracing) + val functionFactory = outer.CandidateFactoryImpl(name, context, tracing) + val variableFactory = outer.CandidateFactoryImpl(name, context, tracing) return CompositeScopeTowerProcessor( - createSimpleFunctionProcessor(scopeTower, name, simpleContextF, explicitReceiver, classValueReceiver = false), - createVariableProcessor(scopeTower, name, simpleContextV, explicitReceiver, classValueReceiver = false) + createSimpleFunctionProcessor(scopeTower, name, functionFactory, explicitReceiver, classValueReceiver = false), + createVariableProcessor(scopeTower, name, variableFactory, explicitReceiver, classValueReceiver = false) ) } } @@ -111,13 +111,13 @@ class NewResolutionOldInference( outer: NewResolutionOldInference, name: Name, tracing: TracingStrategy, scopeTower: ImplicitScopeTower, explicitReceiver: DetailedReceiver?, context: BasicCallResolutionContext ): ScopeTowerProcessor> { - val functionContext = outer.SimpleContext(name, context, tracing) + val functionFactory = outer.CandidateFactoryImpl(name, context, tracing) // todo val call = (context.call as? CallTransformer.CallForImplicitInvoke).sure { "Call should be CallForImplicitInvoke, but it is: ${context.call}" } return createProcessorWithReceiverValueOrEmpty(explicitReceiver) { - createCallTowerProcessorForExplicitInvoke(scopeTower, functionContext, context.transformToReceiverWithSmartCastInfo(call.dispatchReceiver), it) + createCallTowerProcessorForExplicitInvoke(scopeTower, functionFactory, context.transformToReceiverWithSmartCastInfo(call.dispatchReceiver), it) } } @@ -273,11 +273,11 @@ class NewResolutionOldInference( get() = candidateStatus } - private inner class SimpleContext( + private inner class CandidateFactoryImpl( val name: Name, val basicCallContext: BasicCallResolutionContext, val tracing: TracingStrategy - ) : TowerContext> { + ) : CandidateFactory> { override fun createCandidate( towerCandidate: CandidateWithBoundDispatchReceiver, explicitReceiverKind: ExplicitReceiverKind, @@ -327,9 +327,9 @@ class NewResolutionOldInference( } - private inner class InvokeContext( - val functionContext: SimpleContext - ) : InvokeTowerContext, MyCandidate> { + private inner class CandidateFactoryProviderForInvokeImpl( + val functionContext: CandidateFactoryImpl + ) : CandidateFactoryProviderForInvoke, MyCandidate> { override fun transformCandidate( variable: MyCandidate, @@ -346,17 +346,17 @@ class NewResolutionOldInference( return MyCandidate(ResolutionCandidateStatus(variable.candidateStatus.diagnostics + invoke.candidateStatus.diagnostics), resolvedCallImpl) } - override fun contextForVariable(stripExplicitReceiver: Boolean): TowerContext> { + override fun factoryForVariable(stripExplicitReceiver: Boolean): CandidateFactory> { val newCall = CallTransformer.stripCallArguments(functionContext.basicCallContext.call).let { if (stripExplicitReceiver) CallTransformer.stripReceiver(it) else it } - return SimpleContext(functionContext.name, functionContext.basicCallContext.replaceCall(newCall), functionContext.tracing) + return CandidateFactoryImpl(functionContext.name, functionContext.basicCallContext.replaceCall(newCall), functionContext.tracing) } - override fun contextForInvoke( + override fun factoryForInvoke( variable: MyCandidate, useExplicitReceiver: Boolean - ): Pair>>? { + ): Pair>>? { assert(variable.resolvedCall.status.possibleTransformToSuccess()) { "Incorrect status: ${variable.resolvedCall.status} for variable call: ${variable.resolvedCall} " + "and descriptor: ${variable.resolvedCall.candidateDescriptor}" @@ -386,7 +386,7 @@ class NewResolutionOldInference( .replaceCall(functionCall) .replaceContextDependency(ContextDependency.DEPENDENT) // todo - val newContext = SimpleContext(OperatorNameConventions.INVOKE, basicCallResolutionContext, tracingForInvoke) + val newContext = CandidateFactoryImpl(OperatorNameConventions.INVOKE, basicCallResolutionContext, tracingForInvoke) return basicCallResolutionContext.transformToReceiverWithSmartCastInfo(variableReceiver) to newContext } 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 30997ac0bbe..3a07e7aa4a0 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 @@ -28,7 +28,7 @@ import org.jetbrains.kotlin.util.OperatorNameConventions import java.util.* abstract class AbstractInvokeTowerProcessor, V : Candidate>( - protected val invokeContext: InvokeTowerContext, + protected val factoryProviderForInvoke: CandidateFactoryProviderForInvoke, private val variableProcessor: ScopeTowerProcessor ) : ScopeTowerProcessor { // todo optimize it @@ -40,7 +40,7 @@ abstract class AbstractInvokeTowerProcessor, V override fun process(data: TowerData) = invokeProcessor.process(data).map { candidateGroup -> - candidateGroup.map { invokeContext.transformCandidate(variableCandidate, it) } + candidateGroup.map { factoryProviderForInvoke.transformCandidate(variableCandidate, it) } } } @@ -89,16 +89,16 @@ abstract class AbstractInvokeTowerProcessor, V class InvokeTowerProcessor, V : Candidate>( val scopeTower: ImplicitScopeTower, val name: Name, - invokeContext: InvokeTowerContext, + factoryProviderForInvoke: CandidateFactoryProviderForInvoke, explicitReceiver: DetailedReceiver? ) : AbstractInvokeTowerProcessor( - invokeContext, - createVariableAndObjectProcessor(scopeTower, name, invokeContext.contextForVariable(stripExplicitReceiver = false), explicitReceiver) + factoryProviderForInvoke, + createVariableAndObjectProcessor(scopeTower, name, factoryProviderForInvoke.factoryForVariable(stripExplicitReceiver = false), explicitReceiver) ) { // todo filter by operator override fun createInvokeProcessor(variableCandidate: V): ScopeTowerProcessor { - val (variableReceiver, invokeContext) = invokeContext.contextForInvoke(variableCandidate, useExplicitReceiver = false) + val (variableReceiver, invokeContext) = factoryProviderForInvoke.factoryForInvoke(variableCandidate, useExplicitReceiver = false) ?: return KnownResultProcessor(emptyList()) return ExplicitReceiverScopeTowerProcessor(scopeTower, invokeContext, variableReceiver) { getFunctions(OperatorNameConventions.INVOKE, it) } } @@ -107,15 +107,15 @@ class InvokeTowerProcessor, V : Candidate, V : Candidate>( val scopeTower: ImplicitScopeTower, val name: Name, - invokeContext: InvokeTowerContext, + factoryProviderForInvoke: CandidateFactoryProviderForInvoke, private val explicitReceiver: ReceiverValueWithSmartCastInfo? ) : AbstractInvokeTowerProcessor( - invokeContext, - createVariableAndObjectProcessor(scopeTower, name, invokeContext.contextForVariable(stripExplicitReceiver = true), explicitReceiver = null) + factoryProviderForInvoke, + createVariableAndObjectProcessor(scopeTower, name, factoryProviderForInvoke.factoryForVariable(stripExplicitReceiver = true), explicitReceiver = null) ) { override fun createInvokeProcessor(variableCandidate: V): ScopeTowerProcessor { - val (variableReceiver, invokeContext) = invokeContext.contextForInvoke(variableCandidate, useExplicitReceiver = true) + val (variableReceiver, invokeContext) = factoryProviderForInvoke.factoryForInvoke(variableCandidate, useExplicitReceiver = true) ?: return KnownResultProcessor(emptyList()) val invokeDescriptor = scopeTower.getExtensionInvokeCandidateDescriptor(variableReceiver) ?: return KnownResultProcessor(emptyList()) @@ -124,7 +124,7 @@ class InvokeExtensionTowerProcessor, V : Candi } private class InvokeExtensionScopeTowerProcessor>( - context: TowerContext, + context: CandidateFactory, private val invokeCandidateDescriptor: CandidateWithBoundDispatchReceiver, private val explicitReceiver: ReceiverValueWithSmartCastInfo? ) : AbstractSimpleScopeTowerProcessor(context) { @@ -159,7 +159,7 @@ private fun ImplicitScopeTower.getExtensionInvokeCandidateDescriptor( // case 1.(foo())() or (foo())() fun > createCallTowerProcessorForExplicitInvoke( scopeTower: ImplicitScopeTower, - functionContext: TowerContext, + functionContext: CandidateFactory, expressionForInvoke: ReceiverValueWithSmartCastInfo, explicitReceiver: ReceiverValueWithSmartCastInfo? ): ScopeTowerProcessor { 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 d67599ffa25..cb539425882 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 @@ -41,7 +41,7 @@ class CompositeScopeTowerProcessor( } internal abstract class AbstractSimpleScopeTowerProcessor>( - val context: TowerContext + val context: CandidateFactory ) : ScopeTowerProcessor { protected abstract fun simpleProcess(data: TowerData): Collection @@ -51,7 +51,7 @@ internal abstract class AbstractSimpleScopeTowerProcessor>( val scopeTower: ImplicitScopeTower, - context: TowerContext, + context: CandidateFactory, val explicitReceiver: ReceiverValueWithSmartCastInfo, val collectCandidates: ScopeTowerLevel.(extensionReceiver: ReceiverValueWithSmartCastInfo?) -> Collection> ): AbstractSimpleScopeTowerProcessor(context) { @@ -77,7 +77,7 @@ internal class ExplicitReceiverScopeTowerProcessor>( val scopeTower: ImplicitScopeTower, - context: TowerContext, + context: CandidateFactory, val qualifier: QualifierReceiver, val collectCandidates: ScopeTowerLevel.(extensionReceiver: ReceiverValueWithSmartCastInfo?) -> Collection> ): AbstractSimpleScopeTowerProcessor(context) { @@ -92,7 +92,7 @@ private class QualifierScopeTowerProcessor>( - context: TowerContext, + context: CandidateFactory, val collectCandidates: ScopeTowerLevel.(extensionReceiver: ReceiverValueWithSmartCastInfo?) -> Collection> ) : AbstractSimpleScopeTowerProcessor(context) { override fun simpleProcess(data: TowerData): Collection @@ -127,7 +127,7 @@ private class NoExplicitReceiverScopeTowerProcessor> createSimpleProcessor( scopeTower: ImplicitScopeTower, - context: TowerContext, + context: CandidateFactory, explicitReceiver: DetailedReceiver?, classValueReceiver: Boolean, collectCandidates: ScopeTowerLevel.(extensionReceiver: ReceiverValueWithSmartCastInfo?) -> Collection> @@ -155,26 +155,26 @@ private fun > createSimpleProcessor( } fun > createVariableProcessor(scopeTower: ImplicitScopeTower, name: Name, - context: TowerContext, explicitReceiver: DetailedReceiver?, classValueReceiver: Boolean = true + context: CandidateFactory, explicitReceiver: DetailedReceiver?, classValueReceiver: Boolean = true ) = createSimpleProcessor(scopeTower, context, explicitReceiver, classValueReceiver) { getVariables(name, it) } fun > createVariableAndObjectProcessor(scopeTower: ImplicitScopeTower, name: Name, - context: TowerContext, explicitReceiver: DetailedReceiver?, classValueReceiver: Boolean = true + 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: TowerContext, explicitReceiver: DetailedReceiver?, classValueReceiver: Boolean = true + context: CandidateFactory, explicitReceiver: DetailedReceiver?, classValueReceiver: Boolean = true ) = createSimpleProcessor(scopeTower, context, explicitReceiver, classValueReceiver) { getFunctions(name, it) } fun , V: Candidate> createFunctionProcessor( scopeTower: ImplicitScopeTower, name: Name, - simpleContext: TowerContext, - invokeContext: InvokeTowerContext, + simpleContext: CandidateFactory, + factoryProviderForInvoke: CandidateFactoryProviderForInvoke, explicitReceiver: DetailedReceiver? ): CompositeScopeTowerProcessor { @@ -182,11 +182,11 @@ fun , V: Candidate> createF val simpleFunction = createSimpleFunctionProcessor(scopeTower, name, simpleContext, explicitReceiver) // a.foo() -- property a.foo + foo.invoke() - val invokeProcessor = InvokeTowerProcessor(scopeTower, name, invokeContext, explicitReceiver) + val invokeProcessor = InvokeTowerProcessor(scopeTower, name, factoryProviderForInvoke, explicitReceiver) // a.foo() -- property foo is extension function with receiver a -- a.invoke() val invokeExtensionProcessor = createProcessorWithReceiverValueOrEmpty(explicitReceiver) { - InvokeExtensionTowerProcessor(scopeTower, name, invokeContext, it) + InvokeExtensionTowerProcessor(scopeTower, name, factoryProviderForInvoke, it) } return CompositeScopeTowerProcessor(simpleFunction, invokeProcessor, invokeExtensionProcessor) 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 998e9df5a27..f45d4482f33 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 @@ -37,7 +37,7 @@ interface Candidate { val status: ResolutionCandidateStatus } -interface TowerContext> { +interface CandidateFactory> { fun createCandidate( towerCandidate: CandidateWithBoundDispatchReceiver, explicitReceiverKind: ExplicitReceiverKind, @@ -45,15 +45,15 @@ interface TowerContext> { ): C } -interface InvokeTowerContext, V : Candidate> { +interface CandidateFactoryProviderForInvoke, V : Candidate> { fun transformCandidate(variable: V, invoke: F): F - fun contextForVariable(stripExplicitReceiver: Boolean): TowerContext + fun factoryForVariable(stripExplicitReceiver: Boolean): CandidateFactory // foo() -> ReceiverValue(foo), context for invoke // null means that there is no invoke on variable - fun contextForInvoke(variable: V, useExplicitReceiver: Boolean): Pair>? + fun factoryForInvoke(variable: V, useExplicitReceiver: Boolean): Pair>? } sealed class TowerData {