private static void ParseLine()

in src/dotnet/APIView/APIViewWeb/Languages/CppLanguageService.cs [1049:1129]


            private static void ParseLine(string line, ref CppAstNode node)
            {
                string[] tokens = line.Split();
                //Set any common properties
                node.storageClass = tokens.Any(token => token == "static") ? "static" : "";
                node.constexpr = tokens.Any(token => token == "constexpr");
                node.inline = tokens.Any(token => token == "inline");
                node.isimplicit = tokens.Any(token => token == "implicit");

                switch (node.kind)
                {
                    case NamespaceDeclKind:
                    case FunctionTemplateDeclKind:
                    case TemplateTypeParmDeclKind:
                        node.name = tokens.LastOrDefault();
                        break;

                    case VarDeclKind:
                    case ParmVarDeclKind:
                        ParseFieldDecl(line, ref node, ref _varOrParamParser);
                        break;

                    case TypeAliasDeclKind:
                        ParseFieldDecl(line, ref node, ref _typeAliasParser);
                        break;

                    case CxxMethodDeclKind:
                    case CxxConstructorDeclKind:
                    case CxxDestructorDeclKind:
                    case FunctionDeclKind:
                        ParseMethodDecl(line, ref node, ref _methodOrParamParser);
                        break;

                    case CxxRecordDeclKind:
                        ParseClassDecl(line, ref node);
                        break;

                    case ClassTemplateSpecializationDeclKind:
                        ParseClassTemplateSpecializationDecl(line, ref node);
                        break;
                    case TemplateArgumentKind:
                        ParseTemplateArgument(line, ref node);
                        break;
                    case ClassTemplateDeclKind:
                        ParseClassTemplateDecl(line, ref node);
                        break;

                    case FieldDeclKind:
                        ParseFieldDecl(line, ref node, ref _fieldDefParser);
                        break;

                    case StringLiteralKind:
                    case IntegerLiteralKind:
                        ParseLiteralDecl(line, ref node);
                        break;

                    case AccessSpecDeclKind:
                        ParseAccessType(line, ref node);
                        break;

                    case EnumDeclKind:
                        ParseEnumDecl(line, ref node);
                        break;

                    case EnumConstantDeclKind:
                        ParseEnumConstDecl(line, ref node);
                        break;

                    case AccessModifierPublic:
                    case AccessModifierProtected:
                    case AccessModifierPrivate:
                        //Inheritence declaration has inheritance access level as token kinds
                        ParseInheritanceDecl(line, node);
                        break;

                    default:
                        node.name = "Not implemented";
                        node.type = "";
                        break;
                }
            }