Skip to content

Commit 15e17d8

Browse files
committed
Only visit IMethodReferenceOperation.Instance once.
1 parent 37a58e7 commit 15e17d8

1 file changed

Lines changed: 8 additions & 3 deletions

File tree

NullabilityInference/EdgeBuildingOperationVisitor.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -963,9 +963,15 @@ private TypeWithNode[] ExtendMethodTypeArguments(IMethodSymbol targetMethod, Typ
963963
return methodTypeArgNodes;
964964
}
965965

966-
private void HandleMethodGroup(IMethodReferenceOperation operation, TypeWithNode delegateReturnType, IReadOnlyCollection<TypeWithNode> delegateParameters)
966+
private void HandleMethodGroup(IMethodReferenceOperation operation, TypeWithNode delegateReturnType, List<TypeWithNode> delegateParameters)
967967
{
968-
var receiverType = GetReceiverType(operation);
968+
TypeWithNode? receiverType;
969+
if (operation.Instance != null && operation.Method.IsExtensionMethod) {
970+
receiverType = null;
971+
delegateParameters.Insert(0, Visit(operation.Instance, EdgeBuildingContext.Normal));
972+
} else {
973+
receiverType = GetReceiverType(operation);
974+
}
969975
var classTypeArgNodes = ClassTypeArgumentsForMemberAccess(receiverType, operation.Method);
970976
TypeWithNode[]? methodTypeArgNodes = null;
971977
if (operation.Syntax is ExpressionSyntax es) {
@@ -1701,7 +1707,6 @@ public override TypeWithNode VisitDelegateCreation(IDelegateCreationOperation op
17011707
}
17021708
break;
17031709
case IMethodReferenceOperation methodReference:
1704-
if (methodReference.Instance != null && methodReference.Method.IsExtensionMethod) delegateParameters.Insert(0, methodReference.Instance.Accept(this, EdgeBuildingContext.Normal));
17051710
HandleMethodGroup(methodReference, delegateReturnType, delegateParameters);
17061711
break;
17071712
default:

0 commit comments

Comments
 (0)