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) });
}
}