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);
        }
Exemplo n.º 3
0
        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);
        }