[NI] Simplify creation of resolution callbacks

This commit is contained in:
Mikhail Zarechenskiy
2018-03-15 14:22:31 +03:00
parent ff10e97c28
commit 3078e5a6ff
2 changed files with 10 additions and 9 deletions
@@ -20,8 +20,8 @@ import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.BindingTrace
import org.jetbrains.kotlin.resolve.TemporaryBindingTrace
import org.jetbrains.kotlin.resolve.calls.ArgumentTypeResolver
import org.jetbrains.kotlin.resolve.calls.components.InferenceSession
import org.jetbrains.kotlin.resolve.calls.components.KotlinResolutionCallbacks
import org.jetbrains.kotlin.resolve.calls.context.BasicCallResolutionContext
import org.jetbrains.kotlin.resolve.calls.context.ContextDependency
import org.jetbrains.kotlin.resolve.calls.model.LambdaKotlinCallArgument
import org.jetbrains.kotlin.resolve.calls.model.ReceiverKotlinCallArgument
@@ -45,17 +45,16 @@ import org.jetbrains.kotlin.utils.addIfNotNull
import org.jetbrains.kotlin.utils.addToStdlib.safeAs
class KotlinResolutionCallbacksImpl(
topLevelCallContext: BasicCallResolutionContext,
val trace: BindingTrace,
val expressionTypingServices: ExpressionTypingServices,
val typeApproximator: TypeApproximator,
val argumentTypeResolver: ArgumentTypeResolver,
val languageVersionSettings: LanguageVersionSettings,
val kotlinToResolvedCallTransformer: KotlinToResolvedCallTransformer,
val constantExpressionEvaluator: ConstantExpressionEvaluator,
val dataFlowValueFactory: DataFlowValueFactory
val dataFlowValueFactory: DataFlowValueFactory,
override val inferenceSession: InferenceSession
) : KotlinResolutionCallbacks {
val trace: BindingTrace = topLevelCallContext.trace
class LambdaInfo(val expectedType: UnwrappedType, val contextDependency: ContextDependency) {
var dataFlowInfoAfter: DataFlowInfo? = null
val returnStatements = ArrayList<Pair<KtReturnExpression, KotlinTypeInfo?>>()
@@ -182,8 +181,6 @@ class KotlinResolutionCallbacksImpl(
return constantExpressionEvaluator.evaluateExpression(expression, temporaryBindingTrace, expectedType) != null
}
override val inferenceSession = topLevelCallContext.inferenceSession
private fun findCommonParent(callElement: KtExpression, receiver: ReceiverKotlinCallArgument?): KtExpression {
if (receiver == null) return callElement
return PsiTreeUtil.findCommonParent(callElement, receiver.psiExpression)?.safeAs() ?: callElement
@@ -24,6 +24,7 @@ import org.jetbrains.kotlin.resolve.calls.callUtil.createLookupLocation
import org.jetbrains.kotlin.resolve.calls.callUtil.getCall
import org.jetbrains.kotlin.resolve.calls.callUtil.getCalleeExpressionIfAny
import org.jetbrains.kotlin.resolve.calls.callUtil.isSafeCall
import org.jetbrains.kotlin.resolve.calls.components.InferenceSession
import org.jetbrains.kotlin.resolve.calls.context.BasicCallResolutionContext
import org.jetbrains.kotlin.resolve.calls.context.ContextDependency
import org.jetbrains.kotlin.resolve.calls.inference.buildResultingSubstitutor
@@ -150,10 +151,13 @@ class PSICallResolver(
}
private fun createResolutionCallbacks(context: BasicCallResolutionContext) =
createResolutionCallbacks(context.trace, context.inferenceSession)
fun createResolutionCallbacks(trace: BindingTrace, inferenceSession: InferenceSession) =
KotlinResolutionCallbacksImpl(
context, expressionTypingServices, typeApproximator,
trace, expressionTypingServices, typeApproximator,
argumentTypeResolver, languageVersionSettings, kotlinToResolvedCallTransformer,
constantExpressionEvaluator, dataFlowValueFactory
constantExpressionEvaluator, dataFlowValueFactory, inferenceSession
)
private fun calculateExpectedType(context: BasicCallResolutionContext): UnwrappedType? {