public void IsStringEquals(string check, bool expected) { var testCode = @" namespace RoslynSandbox { using System; public class Foo { private string bar1; private string bar2; private int bar3; public Foo() { string.Equals(this.bar1, this.bar1); } } }"; testCode = testCode.AssertReplace("string.Equals(this.bar1, 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 arg0 = semanticModel.GetSymbolSafe(invocation.ArgumentList.Arguments[0].Expression, CancellationToken.None); var arg1 = semanticModel.GetSymbolSafe(invocation.ArgumentList.Arguments[1].Expression, CancellationToken.None); Assert.AreEqual(expected, Equality.IsStringEquals(invocation, semanticModel, CancellationToken.None, arg0, arg1)); Assert.AreEqual(expected, Equality.IsStringEquals(invocation, semanticModel, CancellationToken.None, arg1, arg0)); }