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