getQualifiedExpressionTypeInfo refactoring
This commit is contained in:
+13
-12
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user