public void IsInstanceEquals(string check, bool expected) { var testCode = @" namespace RoslynSandbox { using System; public class Foo { private string bar1; private string bar2; private int bar3; public Foo() { this.bar1.Equals(this.bar1); } } }"; testCode = testCode.AssertReplace("this.bar1.Equals(this.bar1)", check); var syntaxTree = CSharpSyntaxTree.ParseText(testCode); var compilation = CSharpCompilation.Create("test", new[] { syntaxTree }, MetadataReferences.FromAttributes()); var semanticModel = compilation.GetSemanticModel(syntaxTree); var invocation = syntaxTree.FindInvocation(check); var instance = semanticModel.GetSymbolSafe(((MemberAccessExpressionSyntax)invocation.Expression).Expression, CancellationToken.None); var arg = semanticModel.GetSymbolSafe(invocation.ArgumentList.Arguments[0].Expression, CancellationToken.None); Assert.AreEqual(expected, Equality.IsInstanceEquals(invocation, semanticModel, CancellationToken.None, instance, arg)); Assert.AreEqual(ReferenceEquals(instance, arg), Equality.IsInstanceEquals(invocation, semanticModel, CancellationToken.None, arg, instance)); }
private static bool CanFix(IfStatementSyntax ifStatement, SemanticModel semanticModel, CancellationToken cancellationToken, IParameterSymbol value, IFieldSymbol backingField, IPropertySymbol property) { foreach (var member in new ISymbol[] { backingField, property }) { if (Equality.IsOperatorEquals(ifStatement.Condition, semanticModel, cancellationToken, value, member) || Equality.IsObjectEquals(ifStatement.Condition, semanticModel, cancellationToken, value, member) || Equality.IsReferenceEquals(ifStatement.Condition, semanticModel, cancellationToken, value, member) || Equality.IsInstanceEquals(ifStatement.Condition, semanticModel, cancellationToken, value, member) || Equality.IsInstanceEquals(ifStatement.Condition, semanticModel, cancellationToken, member, value)) { return(true); } } return(false); }
private static bool IsEqualsCheck(ExpressionSyntax expression, SemanticModel semanticModel, CancellationToken cancellationToken, IParameterSymbol value, ISymbol member) { var equals = expression as InvocationExpressionSyntax; if (equals == null) { return(false); } if (Equality.IsObjectEquals(equals, semanticModel, cancellationToken, value, member) || Equality.IsInstanceEquals(equals, semanticModel, cancellationToken, value, member) || Equality.IsInstanceEquals(equals, semanticModel, cancellationToken, member, value) || Equality.IsReferenceEquals(equals, semanticModel, cancellationToken, value, member) || Equality.IsEqualityComparerEquals(equals, semanticModel, cancellationToken, value, member) || Equality.IsNullableEquals(equals, semanticModel, cancellationToken, value, member)) { return(true); } return(false); }