private void ProcessCandidates(List <TypeDeclarationSyntax> candidates)
        {
            foreach (var candidate in candidates)
            {
                SemanticModel classModel = _context.Compilation.GetSemanticModel(candidate.SyntaxTree);
                var           symbol     = classModel.GetDeclaredSymbol(candidate);
                var           declmeta   = new ClassDeclMeta(symbol);
                switch (candidate)
                {
                case ClassDeclarationSyntax classdecl:
                {
                    AddMemberIfNeed(declmeta, classdecl);
                    break;
                }

                case StructDeclarationSyntax structdecl:
                {
                    AddMemberIfNeed(declmeta, structdecl);
                    break;
                }
                    //case RecordDeclarationSyntax recorddecl:
                    //    {
                    //        AddMemberIfNeed(declmeta, recorddecl);
                    //        break;
                    //    }
                }
                if (declmeta.MemberDeclarations.Count > 0)
                {
                    meta.Add(declmeta);
                }
            }
        }
        private void AddMemberIfNeed(ClassDeclMeta decl, TypeDeclarationSyntax syntax)
        {
            foreach (var member in syntax.Members)
            {
                switch (member)
                {
                case FieldDeclarationSyntax fielddecl:
                {
                    SemanticModel memberModel = _context.Compilation.GetSemanticModel(fielddecl.SyntaxTree);

                    foreach (var variable in fielddecl.Declaration.Variables)
                    {
                        IFieldSymbol fieldSymbol = memberModel.GetDeclaredSymbol(variable) as IFieldSymbol;
                        if (IsIgnore(fieldSymbol))
                        {
                            continue;
                        }

                        if (fieldSymbol.DeclaredAccessibility == Accessibility.Public)
                        {
                            decl.MemberDeclarations.Add(new MemberDeclarationMeta(fieldSymbol));
                        }
                    }
                    break;
                }

                case PropertyDeclarationSyntax propdecl:
                {
                    SemanticModel memberModel    = _context.Compilation.GetSemanticModel(propdecl.SyntaxTree);
                    ISymbol       propertySymbol = memberModel.GetDeclaredSymbol(propdecl);
                    if (IsIgnore(propertySymbol))
                    {
                        continue;
                    }
                    if (propertySymbol.DeclaredAccessibility == Accessibility.Public)
                    {
                        decl.MemberDeclarations.Add(new MemberDeclarationMeta(propertySymbol));
                    }
                    break;
                }
                }
            }
        }