private void BuildType()

in src/dotnet/APIView/APIView/Languages/CodeFileBuilder.cs [238:340]


        private void BuildType(CodeFileTokensBuilder builder, INamedTypeSymbol namedType, List<NavigationItem> navigationBuilder, bool inHiddenScope)
        {
            if (!IsAccessible(namedType))
            {
                return;
            }

            bool isHidden = IsHiddenFromIntellisense(namedType);
            var navigationItem = new NavigationItem()
            {
                NavigationId = namedType.GetId(),
                Text = namedType.ToDisplayString(SymbolDisplayFormat.MinimallyQualifiedFormat),
                IsHiddenApi = isHidden
            };
            navigationBuilder.Add(navigationItem);
            navigationItem.Tags.Add("TypeKind", namedType.TypeKind.ToString().ToLowerInvariant());

            if (isHidden && !inHiddenScope)
            {
                builder.Append(null, CodeFileTokenKind.HiddenApiRangeStart);
            }

            BuildDocumentation(builder, namedType);
            BuildAttributes(builder, namedType.GetAttributes());

            builder.WriteIndent();
            BuildVisibility(builder, namedType);

            builder.Space();

            switch (namedType.TypeKind)
            {
                case TypeKind.Class:
                    BuildClassModifiers(builder, namedType);
                    builder.Keyword(SyntaxKind.ClassKeyword);
                    break;
                case TypeKind.Delegate:
                    builder.Keyword(SyntaxKind.DelegateKeyword);
                    break;
                case TypeKind.Enum:
                    builder.Keyword(SyntaxKind.EnumKeyword);
                    break;
                case TypeKind.Interface:
                    builder.Keyword(SyntaxKind.InterfaceKeyword);
                    break;
                case TypeKind.Struct:
                    if (namedType.IsReadOnly)
                    {
                        builder.Keyword(SyntaxKind.ReadOnlyKeyword);
                        builder.Space();
                    }
                    builder.Keyword(SyntaxKind.StructKeyword);
                    break;
            }

            builder.Space();

            NodeFromSymbol(builder, namedType);
            if (namedType.TypeKind == TypeKind.Delegate)
            {
                builder.Punctuation(SyntaxKind.SemicolonToken);
                builder.NewLine();
                return;
            }

            builder.Space();

            BuildBaseType(builder, namedType);

            builder.Punctuation(SyntaxKind.OpenBraceToken);
            builder.IncrementIndent();
            builder.NewLine();

            foreach (var namedTypeSymbol in SymbolOrderProvider.OrderTypes(namedType.GetTypeMembers()))
            {
                BuildType(builder, namedTypeSymbol, navigationBuilder, inHiddenScope || isHidden);
            }

            foreach (var member in SymbolOrderProvider.OrderMembers(namedType.GetMembers()))
            {
                if (member.Kind == SymbolKind.NamedType || member.IsImplicitlyDeclared || !IsAccessible(member)) continue;
                if (member is IMethodSymbol method)
                {
                    if (method.MethodKind == MethodKind.PropertyGet ||
                        method.MethodKind == MethodKind.PropertySet ||
                        method.MethodKind == MethodKind.EventAdd ||
                        method.MethodKind == MethodKind.EventRemove ||
                        method.MethodKind == MethodKind.EventRaise)
                    {
                        continue;
                    }
                }

                BuildMember(builder, member, inHiddenScope);
            }

            CloseBrace(builder);

            if (isHidden && !inHiddenScope)
            {
                builder.Append(null, CodeFileTokenKind.HiddenApiRangeEnd);
            }
        }