getQualifiedExpressionTypeInfo refactoring

This commit is contained in:
Mikhail Glukhikh
2016-02-12 16:44:23 +03:00
parent 88e7b728df
commit 84a072b9f0
@@ -275,16 +275,8 @@ class CallExpressionResolver(
return noTypeInfo(context) return noTypeInfo(context)
} }
/** private fun KtQualifiedExpression.elementChain(context: ExpressionTypingContext) =
* Visits a qualified expression like x.y or x?.z controlling data flow information changes. qualifiedExpressionResolver.resolveQualifierInExpressionAndUnroll(this, context) {
* @return qualified expression type together with data flow information
*/
fun getQualifiedExpressionTypeInfo(expression: KtQualifiedExpression, context: ExpressionTypingContext): KotlinTypeInfo {
val currentContext = context.replaceExpectedType(NO_EXPECTED_TYPE).replaceContextDependency(INDEPENDENT)
val trace = currentContext.trace
val elementChain = qualifiedExpressionResolver.resolveQualifierInExpressionAndUnroll(expression, context) {
nameExpression -> nameExpression ->
val temporaryForVariable = TemporaryTraceAndCache.create( val temporaryForVariable = TemporaryTraceAndCache.create(
context, "trace to resolve as local variable or property", nameExpression) context, "trace to resolve as local variable or property", nameExpression)
@@ -303,8 +295,17 @@ class CallExpressionResolver(
} }
} }
val firstElement = elementChain.first() /**
val firstReceiver = firstElement.receiver * Visits a qualified expression like x.y or x?.z controlling data flow information changes.
* @return qualified expression type together with data flow information
*/
fun getQualifiedExpressionTypeInfo(expression: KtQualifiedExpression, context: ExpressionTypingContext): KotlinTypeInfo {
val currentContext = context.replaceExpectedType(NO_EXPECTED_TYPE).replaceContextDependency(INDEPENDENT)
val trace = currentContext.trace
val elementChain = expression.elementChain(context)
val firstReceiver = elementChain.first().receiver
var receiverTypeInfo = when (trace.get(BindingContext.QUALIFIER, firstReceiver)) { var receiverTypeInfo = when (trace.get(BindingContext.QUALIFIER, firstReceiver)) {
null -> expressionTypingServices.getTypeInfo(firstReceiver, currentContext) null -> expressionTypingServices.getTypeInfo(firstReceiver, currentContext)