Пример #1
0
        public static void TryFindWhenProperty()
        {
            var syntaxTree = CSharpSyntaxTree.ParseText(@"
namespace N
{
    public class C
    {
        public int P { get; }

        public void M()
        {
            var p = this.P;
        }
    }
}");
            var node       = syntaxTree.FindMethodDeclaration("M");

            using (var walker = IdentifierNameWalker.Borrow(node))
            {
                CollectionAssert.AreEqual(new[] { "var", "P" }, walker.IdentifierNames.Select(x => x.Identifier.ValueText));

                Assert.AreEqual(true, walker.TryFind("P", out var match));
                Assert.AreEqual("P", match.Identifier.ValueText);

                Assert.AreEqual(false, walker.TryFind("missing", out _));
            }
        }
Пример #2
0
        public static void TryFindLast()
        {
            var syntaxTree    = CSharpSyntaxTree.ParseText(@"
namespace N
{
    public class C
    {
        public C(int i)
        {
            i = 1;
            i = 2;
        }
    }
}");
            var compilation   = CSharpCompilation.Create("test", new[] { syntaxTree }, MetadataReferences.FromAttributes());
            var semanticModel = compilation.GetSemanticModel(syntaxTree);
            var symbol        = semanticModel.GetDeclaredSymbolSafe(syntaxTree.FindParameter("int i"), CancellationToken.None);
            var node          = syntaxTree.FindTypeDeclaration("C");

            Assert.AreEqual(true, IdentifierNameWalker.TryFindLast(node, symbol, semanticModel, CancellationToken.None, out var match));
            Assert.AreEqual("i = 2", match.Parent.ToString());

            using (var walker = IdentifierNameWalker.Borrow(node))
            {
                Assert.AreEqual(true, walker.TryFindLast(symbol, semanticModel, CancellationToken.None, out match));
                Assert.AreEqual("i = 2", match.Parent.ToString());
            }
        }
        private static bool IsInitializedWith(PropertyDeclarationSyntax x, PropertyDeclarationSyntax y)
        {
            if (y.Modifiers.Any(SyntaxKind.StaticKeyword) &&
                x.Initializer is { Value : { } value } initializer&&
                !(value is LiteralExpressionSyntax))
            {
                using var walker = IdentifierNameWalker.Borrow(initializer);
                foreach (var identifierName in walker.IdentifierNames)
                {
                    if (y.Identifier.ValueText == identifierName.Identifier.ValueText)
                    {
                        return(true);
                    }
                }
            }

            return(false);
        }
Пример #4
0
        private static bool IsInitializedWith(FieldDeclarationSyntax x, FieldDeclarationSyntax y)
        {
            if (y.Modifiers.Any(SyntaxKind.ConstKeyword, SyntaxKind.StaticKeyword) &&
                x.Declaration.Variables.TryLast(out var variable) &&
                variable.Initializer is { Value : { } value } initializer&&
                !(value is LiteralExpressionSyntax))
            {
                using (var walker = IdentifierNameWalker.Borrow(initializer))
                {
                    foreach (var identifierName in walker.IdentifierNames)
                    {
                        if (y.Declaration.TryFindVariable(identifierName.Identifier.ValueText, out _))
                        {
                            return(true);
                        }
                    }
                }
            }

            return(false);
        }
Пример #5
0
        public static void TryFindWhenParameter()
        {
            var syntaxTree = CSharpSyntaxTree.ParseText(@"
namespace N
{
    public class C
    {
        public C(int i)
        {
            i = 1;
        }
    }
}");
            var node       = syntaxTree.FindTypeDeclaration("C");

            using var walker = IdentifierNameWalker.Borrow(node);
            CollectionAssert.AreEqual(new[] { "i" }, walker.IdentifierNames.Select(x => x.Identifier.ValueText));
            Assert.AreEqual(true, walker.TryFind("i", out var match));
            Assert.AreEqual("i", match.Identifier.ValueText);
            Assert.AreEqual(false, walker.TryFind("missing", out _));
        }