private static void GetReferencedTypes()

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