@@ -24,6 +24,8 @@ private Invocation(ExpressionNodeInfo info)
2424
2525 private bool IsExplicitDelegateInvokeCall ( ) => Kind == ExprKind . DELEGATE_INVOCATION && Context . GetModel ( Syntax . Expression ) . GetSymbolInfo ( Syntax . Expression ) . Symbol is IMethodSymbol m && m . MethodKind == MethodKind . DelegateInvoke ;
2626
27+ private bool IsOperatorCall ( ) => Kind == ExprKind . OPERATOR_INVOCATION ;
28+
2729 protected override void PopulateExpression ( TextWriter trapFile )
2830 {
2931 if ( IsNameof ( Syntax ) )
@@ -37,7 +39,7 @@ protected override void PopulateExpression(TextWriter trapFile)
3739 var target = TargetSymbol ;
3840 switch ( Syntax . Expression )
3941 {
40- case MemberAccessExpressionSyntax memberAccess when Kind == ExprKind . METHOD_INVOCATION || IsEventDelegateCall ( ) || IsExplicitDelegateInvokeCall ( ) :
42+ case MemberAccessExpressionSyntax memberAccess when Kind == ExprKind . METHOD_INVOCATION || IsEventDelegateCall ( ) || IsExplicitDelegateInvokeCall ( ) || IsOperatorCall ( ) :
4143 memberName = memberAccess . Name . Identifier . Text ;
4244 if ( Syntax . Expression . Kind ( ) == SyntaxKind . SimpleMemberAccessExpression )
4345 // Qualified method call; `x.M()`
@@ -113,6 +115,13 @@ private static bool IsDynamicCall(ExpressionNodeInfo info)
113115
114116 public SymbolInfo SymbolInfo => info . SymbolInfo ;
115117
118+ private static bool IsOperatorLikeCall ( ExpressionNodeInfo info )
119+ {
120+ return info . SymbolInfo . Symbol is IMethodSymbol method &&
121+ method . TryGetExtensionMethod ( out var original ) &&
122+ original ! . MethodKind == MethodKind . UserDefinedOperator ;
123+ }
124+
116125 public IMethodSymbol ? TargetSymbol
117126 {
118127 get
@@ -206,15 +215,25 @@ private static bool IsLocalFunctionInvocation(ExpressionNodeInfo info)
206215
207216 private static ExprKind GetKind ( ExpressionNodeInfo info )
208217 {
209- return IsNameof ( ( InvocationExpressionSyntax ) info . Node )
210- ? ExprKind . NAMEOF
211- : IsDelegateLikeCall ( info )
212- ? IsDelegateInvokeCall ( info )
213- ? ExprKind . DELEGATE_INVOCATION
214- : ExprKind . FUNCTION_POINTER_INVOCATION
215- : IsLocalFunctionInvocation ( info )
216- ? ExprKind . LOCAL_FUNCTION_INVOCATION
217- : ExprKind . METHOD_INVOCATION ;
218+ if ( IsNameof ( ( InvocationExpressionSyntax ) info . Node ) )
219+ {
220+ return ExprKind . NAMEOF ;
221+ }
222+ if ( IsDelegateLikeCall ( info ) )
223+ {
224+ return IsDelegateInvokeCall ( info )
225+ ? ExprKind . DELEGATE_INVOCATION
226+ : ExprKind . FUNCTION_POINTER_INVOCATION ;
227+ }
228+ if ( IsLocalFunctionInvocation ( info ) )
229+ {
230+ return ExprKind . LOCAL_FUNCTION_INVOCATION ;
231+ }
232+ if ( IsOperatorLikeCall ( info ) )
233+ {
234+ return ExprKind . OPERATOR_INVOCATION ;
235+ }
236+ return ExprKind . METHOD_INVOCATION ;
218237 }
219238
220239 private static bool IsNameof ( InvocationExpressionSyntax syntax )
0 commit comments