public override()

in dotnet/CSharpSourceGraphExtraction/GraphBuilders/VariableUseGraphBuilder.cs [326:373]


        public override (SyntaxToken? entryNode, IEnumerable<SyntaxToken> exitNodes) VisitAssignmentExpression(AssignmentExpressionSyntax node)
        {
            var (rhsEntry, rhsExits) = Visit(node.Right);
            var (lhsEntry, lhsExits) = Visit(node.Left);

            // lhsEntry will be None for assignments to static class variables of other classes.
            if (lhsEntry.HasValue)
            {
                AddEdges(lhsEntry.Value, rhsExits);

                // We distinguish tuple assignments from others:
                if (node.Left is DeclarationExpressionSyntax lhsDeclaration)
                {
                    HandleTupleAssignment(lhsDeclaration.Designation, node.Right);
                }
                else
                {
                    var writtenToken = lhsExits.First();
                    foreach (var usedToken in node.Right.DescendantTokens().Where(token => _graph.VariableUseNodes.Contains(token)))
                    {
                        _graph.AddEdge(writtenToken, SourceGraphEdge.ComputedFrom, usedToken);
                    }
                    _graph.VariableWriteNodes.Add(writtenToken);
                }
            }
            else if (!(node.Parent is InitializerExpressionSyntax))
            {
                // ComputedFrom edges will be added to the object being initialized and
                // not within the initializer.
                _graph.AddEdge(node.Left, SourceGraphEdge.ComputedFrom, node.Right);
            }

            if (rhsEntry != null)  // rhsEntry is null if the rhs is just constants
            {
                if (lhsExits.Any())
                {
                    return (rhsEntry, lhsExits);
                }
                else
                {
                    return (rhsEntry, rhsExits);
                }
            }
            else
            {
                return (lhsEntry, lhsExits);
            }
        }