static void Entities()

in packages/LUISGen/src/CSharp.cs [136:236]


        static void Entities(dynamic app, Writer w)
        {
            // Entities
            w.WriteLine();
            w.IndentLine("public class _Entities");
            w.IndentLine("{");
            w.Indent();
            if (app.entities != null && app.entities.Count > 0)
            {
                w.IndentLine("// Simple entities");
                var first = true;
                foreach (var entity in app.entities)
                {
                    if (first)
                    {
                        first = false;
                    }
                    else
                    {
                        w.WriteLine();
                    }
                    WriteEntity(entity, entity.name, app, w);
                    if (entity?.children != null)
                    {
                        // Hiearchical
                        foreach (var child in entity.children)
                        {
                            WriteEntity(Utils.Entity(child), child, app, w);
                        }
                    }
                }
            }

            WriteEntities(app.prebuiltEntities, app, "Built-in entities", w);
            WriteEntities(app.closedLists, app, "Lists", w);
            WriteEntities(app.regex_entities, app, "Regex entities", w);
            WriteEntities(app.patternAnyEntities, app, "Pattern.any", w);

            // Composites
            if (app.composites != null && app.composites.Count > 0)
            {
                w.WriteLine();
                w.IndentLine("// Composites");
                bool first = true;
                foreach (var composite in app.composites)
                {
                    if (first)
                    {
                        first = false;
                    }
                    else
                    {
                        w.WriteLine();
                    }
                    var name = Utils.NormalizeName(composite.name);
                    w.IndentLine($"public class _Instance{name}");
                    w.IndentLine("{");
                    w.Indent();
                    foreach (var child in composite.children)
                    {
                        var childName = PropertyName(child, app);
                        w.IndentLine($"public InstanceData[] {childName};");
                    }
                    w.Outdent();
                    w.IndentLine("}");
                    w.IndentLine($"public class {name}Class");
                    w.IndentLine("{");
                    w.Indent();
                    foreach (var child in composite.children)
                    {
                        WriteEntity(Utils.Entity(child), Utils.IsList(child, app) ? "list" : child, app, w);
                    }
                    w.IndentLine("[JsonProperty(\"$instance\")]");
                    w.IndentLine($"public _Instance{name} _instance;");
                    w.Outdent();
                    w.IndentLine("}");
                    w.IndentLine($"public {name}Class[] {name};");
                }
            }

            // Instance
            w.WriteLine();
            w.IndentLine("// Instance");
            w.IndentLine("public class _Instance");
            w.IndentLine("{");
            w.Indent();
            Utils.WriteInstances((JObject)app, (name) =>
            {
                var realName = PropertyName(name, app);
                w.IndentLine($"public InstanceData[] {realName};");
            });
            w.Outdent();
            w.IndentLine("}");
            w.IndentLine("[JsonProperty(\"$instance\")]");
            w.IndentLine("public _Instance _instance;");

            w.Outdent();
            w.IndentLine("}"); // Entities
            w.IndentLine("[JsonProperty(\"entities\")]");
            w.IndentLine("public _Entities Entities;");
        }