FIR: Fix callable references resolution with stub receivers

Use stubReceiver as a receiver for fake calls

See issues KT-43358 KT-43359 KT-43378
This commit is contained in:
Denis Zharkov
2020-11-15 13:15:15 +03:00
parent f97cc0b62d
commit d4c7d4fc7c
12 changed files with 27 additions and 29 deletions
@@ -180,16 +180,15 @@ internal open class FirTowerResolveTask(
if (resolvedQualifier.symbol != null) {
val typeRef = resolvedQualifier.typeRef
// NB: yet built-in Unit is used for "no-value" type
if (info.callKind == CallKind.CallableReference) {
if (info.stubReceiver != null || typeRef !is FirImplicitBuiltinTypeRef) {
runResolverForExpressionReceiver(info, resolvedQualifier, parentGroup = TowerGroup.QualifierValue)
}
} else {
if (typeRef !is FirImplicitBuiltinTypeRef) {
runResolverForExpressionReceiver(info, resolvedQualifier, parentGroup = TowerGroup.QualifierValue)
}
if (info.callKind == CallKind.CallableReference && info.stubReceiver != null ) {
runResolverForExpressionReceiver(info, info.stubReceiver, parentGroup = TowerGroup.QualifierValue)
}
// NB: yet built-in Unit is used for "no-value" type
if (typeRef !is FirImplicitBuiltinTypeRef) {
runResolverForExpressionReceiver(info, resolvedQualifier, parentGroup = TowerGroup.QualifierValue)
}
}
}