public override()

in dotnet/CSharpSourceGraphExtraction/GraphBuilders/VariableUseGraphBuilder.cs [260:294]


        public override (SyntaxToken? entryNode, IEnumerable<SyntaxToken> exitNodes) VisitParameter(ParameterSyntax node)
            => HandleDeclaration(node.Identifier, node.Default);

        public override (SyntaxToken? entryNode, IEnumerable<SyntaxToken> exitNodes) VisitSingleVariableDesignation(SingleVariableDesignationSyntax node)
            => HandleDeclaration(node.Identifier, null);

        public override (SyntaxToken? entryNode, IEnumerable<SyntaxToken> exitNodes) VisitVariableDeclaration(VariableDeclarationSyntax node)
            => HandleSequentialNodes(node.Variables);

        public override (SyntaxToken? entryNode, IEnumerable<SyntaxToken> exitNodes) VisitVariableDeclarator(VariableDeclaratorSyntax node)
            => HandleDeclaration(node.Identifier, node.Initializer);

        public override (SyntaxToken? entryNode, IEnumerable<SyntaxToken> exitNodes) VisitPropertyDeclaration(PropertyDeclarationSyntax node)
        {
            if (node.ExpressionBody == null && (node.AccessorList == null || node.AccessorList.Accessors.Count == 0))
            {
                return HandleDeclaration(node.Identifier, node.Initializer);
            }
            else if (node.ExpressionBody != null)
            {
                return HandleDeclaration(node.Identifier, node.ExpressionBody.Expression);
            }
            else
            {
                var getter = node.AccessorList.Accessors.Where(acc => acc.Keyword.IsKind(SyntaxKind.GetKeyword)).FirstOrDefault();
                var setter = node.AccessorList.Accessors.Where(acc => acc.Keyword.IsKind(SyntaxKind.SetKeyword)).FirstOrDefault();
                var (initializerEntryNode, initializerExitNodes) = HandleDeclaration(node.Identifier, (SyntaxNode) getter ?? node.Initializer);
                if (setter == null)
                {
                    return (initializerEntryNode, initializerExitNodes);
                }
                var (setterEntryNode, setterExitNodes) = Visit(setter);
                return ChainOptionalResults(new[] { (initializerEntryNode, initializerExitNodes), (setterEntryNode, setterExitNodes) });
            }
        }