V3062. An object is used as an argument to its own method. Consider checking the first actual argument of the 'Foo' method


The analyzer detected a method call of the following pattern:

A.Foo(A);

This suspicious code is very likely to contain an error – for example a typo that results in using a wrong variable name. The fixed version of this code should look like this:

A.Foo(B);

or this:

B.Foo(A);

And here's an example from a real application:

private bool CanRenameAttributePrefix(....)
{
  ....
  var nameWithoutAttribute = 
    this.RenameSymbol.Name.GetWithoutAttributeSuffix(isCaseSensitive:
                                                     true);
  var triggerText = GetSpanText(document, 
                                triggerSpan, 
                                cancellationToken);

  // nameWithoutAttribute, triggerText - String
  return triggerText.StartsWith(triggerText); 
}

The return value in this code will always be the value 'true' because the method that checks whether a string starts with a substring receives, as its argument, the string itself ('triggerText'). The programmer must have meant the following check instead:

return triggerText.StartsWith(nameWithoutAttribute);

Bugs Found

Checked Projects
334
Collected Errors
12 668