K2: do not try to resolve invoke on error receiver
If a potential receiver is resolved to an error type, we consider any other type as a subtype of it and therefore may select any candidate that we happen to find in a scope. In particular, in the case of scripts, or code with a context receiver, the receiver candidate resolved to a cycle was accepted as a receiver to an invoke on a random class from stdlib. The fix skips adding invoke resolve task in this case, allowing the tower to find the correct candidate in another scope. #KT-64241 fixed #KT-65576 fixed
This commit is contained in:
committed by
Space Team
parent
d5ad41fa28
commit
fecc5ba501
+2
@@ -178,6 +178,8 @@ internal class FirInvokeResolveTowerExtension(
|
||||
invokeReceiverCandidate, info, invokeBuiltinExtensionMode, extensionReceiverExpression
|
||||
) ?: continue
|
||||
|
||||
if (invokeReceiverExpression.resolvedType is ConeErrorType) continue
|
||||
|
||||
val invokeFunctionInfo =
|
||||
info.copy(
|
||||
explicitReceiver = invokeReceiverExpression,
|
||||
|
||||
Reference in New Issue
Block a user