in DataExtraction/SourceGraphExtractionUtils/GraphDataExtractor.cs [470:537]
private static IDictionary<SyntaxNode, SyntaxNodeOrToken> ComputeNodeCompressionMap(SourceGraph graph)
{
var nodeToTokenMap = new Dictionary<SyntaxNode, SyntaxNodeOrToken>();
foreach (var node in graph.Nodes.Where(node => node.IsNode))
{
var syntaxNode = node.AsNode();
SyntaxNodeOrToken? replacementNode = null;
switch (syntaxNode)
{
case PropertyDeclarationSyntax propDecl:
replacementNode = propDecl.Identifier;
break;
case VariableDeclaratorSyntax varDecl:
replacementNode = varDecl.Identifier;
break;
case IdentifierNameSyntax idNameSyn:
replacementNode = idNameSyn.Identifier;
break;
case OmittedArraySizeExpressionSyntax ommittedSyn:
replacementNode = ommittedSyn.OmittedArraySizeExpressionToken;
break;
case PredefinedTypeSyntax predefTypeSyn:
replacementNode = predefTypeSyn.Keyword;
break;
case LiteralExpressionSyntax litSyn:
replacementNode = litSyn.Token;
break;
case EnumMemberDeclarationSyntax enumMemberSym:
replacementNode = enumMemberSym.Identifier;
break;
case SimpleBaseTypeSyntax simpleTypeSyntax:
replacementNode = simpleTypeSyntax.Type;
break;
case TypeParameterSyntax typeParSyntax:
replacementNode = typeParSyntax.Identifier;
break;
case BaseExpressionSyntax baseExprSyntax:
replacementNode = baseExprSyntax.Token;
break;
case SingleVariableDesignationSyntax singleVarSyntax:
replacementNode = singleVarSyntax.Identifier;
break;
case ThisExpressionSyntax thisSyntax:
replacementNode = thisSyntax.Token;
break;
case ClassOrStructConstraintSyntax classOrStructSyntax:
replacementNode = classOrStructSyntax.ClassOrStructKeyword;
break;
case InterpolatedStringTextSyntax interpolStringSyntax:
replacementNode = interpolStringSyntax.TextToken;
break;
case ArgumentSyntax argSyn:
if (argSyn.NameColon == null && argSyn.RefOrOutKeyword.SyntaxTree == null)
{
replacementNode = argSyn.Expression;
}
break;
}
if (replacementNode.HasValue)
{
nodeToTokenMap[syntaxNode] = replacementNode.Value;
}
}
return nodeToTokenMap;
}