in src/TemplateRefGenerator/Generators/ChangelogGenerator.cs [352:394]
private static void GetReferencedTypes(TypeBase type, HashSet<TypeBase> types)
{
if (types.Contains(type))
{
// avoid cycles
return;
}
types.Add(type);
switch (type)
{
case ArrayType arrayType:
types.Add(arrayType.ItemType.Type);
break;
case ObjectType objectType:
foreach (var (_, property) in GetOrderedWritableProperties(objectType.Properties))
{
GetReferencedTypes(property.Type.Type, types);
}
if (objectType.AdditionalProperties is {} addType)
{
GetReferencedTypes(addType.Type, types);
}
break;
case DiscriminatedObjectType discType:
foreach (var (_, property) in GetOrderedWritableProperties(discType.BaseProperties))
{
GetReferencedTypes(property.Type.Type, types);
}
foreach (var element in discType.Elements.Values)
{
GetReferencedTypes(element.Type, types);
}
break;
case UnionType unionType:
foreach (var element in unionType.Elements)
{
GetReferencedTypes(element.Type, types);
}
break;
}
}