public IEnumerable <String> GetTypePredefinition(TypeDef t) { var Name = t.DefinitionName(); var GenericParameterLine = GetGenericParameterLine(t.GenericParameters()); String MetaType = "class"; if (t.OnPrimitive) { return(new List <String> { }); } else if (t.OnAlias || t.OnRecord || t.OnTaggedUnion || t.OnClientCommand || t.OnServerCommand) { MetaType = "class"; } else if (t.OnEnum) { return(new List <String> { }); } if (t.OnClientCommand) { var c = t.ClientCommand; var RequestRef = GetSuffixedTypeRef(c.Name, c.Version, "Request"); var ReplyRef = GetSuffixedTypeRef(c.Name, c.Version, "Reply"); var Request = new RecordDef { Name = RequestRef.Name, Version = RequestRef.Version, GenericParameters = new List <VariableDef> { }, Fields = c.OutParameters, Attributes = c.Attributes, Description = c.Description }; var Reply = new TaggedUnionDef { Name = ReplyRef.Name, Version = ReplyRef.Version, GenericParameters = new List <VariableDef> { }, Alternatives = c.InParameters, Attributes = c.Attributes, Description = c.Description }; return(TypePredefinition(Request.DefinitionName(), MetaType, t.GenericParameters()).Concat(TypePredefinition(Reply.DefinitionName(), MetaType, t.GenericParameters()))); } else if (t.OnServerCommand) { var c = t.ServerCommand; var EventRef = GetSuffixedTypeRef(c.Name, c.Version, "Event"); var Event = new RecordDef { Name = EventRef.Name, Version = EventRef.Version, GenericParameters = new List <VariableDef> { }, Fields = c.OutParameters, Attributes = c.Attributes, Description = c.Description }; return(TypePredefinition(Event.DefinitionName(), MetaType, t.GenericParameters())); } else { return(TypePredefinition(Name, MetaType, t.GenericParameters())); } }