private static IDictionary ComputeNodeCompressionMap()

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