void WriteMembers(Message message, CodeWriter writer) { var idx = 1; foreach (var member in message.Members) { writer.WriteLine(MemberTemplate, idx, member.Type, GeneratorUtil.MemberCase(member.Name)); idx += 1; } }
void WriteParameters(Message message, CodeWriter writer) { var first = true; foreach (var member in message.Members) { if (first) { first = false; } else { writer.Write(", "); } writer.Write("{0} {1}", member.Type, GeneratorUtil.ParameterCase(member.Name)); } }
private void WriteContext(CodeWriter writer, Context context) { foreach (var contract in context.Contracts) { writer.Write(ClassNameTemplate, contract.Name); if (contract.Modifiers.Any()) { writer.Write(" : {0}", string.Join(", ", contract.Modifiers.Select(s => s.Interface).ToArray())); } writer.WriteLine(); writer.WriteLine("{"); writer.Indent += 1; if (contract.Members.Count > 0) { WriteMembers(contract, writer); writer.WriteLine(); WritePrivateCtor(writer, contract); writer.Write("public {0} (", contract.Name); WriteParameters(contract, writer); writer.WriteLine(")"); writer.WriteLine("{"); writer.Indent += 1; WriteAssignments(contract, writer); writer.Indent -= 1; writer.WriteLine("}"); } writer.Indent -= 1; writer.WriteLine("}"); } foreach (var entity in context.Entities) { if ((entity.Name ?? "default") == "default") continue; GenerateEntityInterface(entity, writer, "?", "public interface I{0}ApplicationService"); GenerateEntityInterface(entity, writer, "!", "public interface I{0}State"); } }
void WriteAssignments(Message message, CodeWriter writer) { foreach (var member in message.Members) { writer.WriteLine("{0} = {1};", GeneratorUtil.MemberCase(member.Name), GeneratorUtil.ParameterCase(member.Name)); } }
void GenerateEntityInterface(Entity entity, CodeWriter writer, string member, string template) { var ms = member.Split(','); var matches = entity.Messages.Where(m => m.Modifiers.Select(s => s.Identifier).Intersect(ms).Any()).ToList(); if (matches.Any()) { writer.WriteLine(); writer.WriteLine(template, entity.Name); writer.WriteLine("{"); writer.Indent += 1; foreach (var contract in matches) { writer.WriteLine("void When({0} {1});", contract.Name, member == "!" ? "e" : "c"); } writer.Indent -= 1; writer.WriteLine("}"); } }
static void WritePrivateCtor(CodeWriter writer, Message contract) { var arrays = contract.Members.Where(p => p.Type.EndsWith("[]")).ToArray(); if (!arrays.Any()) { writer.WriteLine(@"{0} () {{}}", contract.Name); } else { writer.WriteLine(@"{0} () {{", contract.Name); writer.Indent += 1; foreach (var array in arrays) { writer.WriteLine("{0} = new {1};", GeneratorUtil.MemberCase(array.Name), array.Type.Replace("[]", "[0]") ); } writer.Indent -= 1; writer.WriteLine("}"); } }
public void Generate(Context context, IndentedTextWriter outer) { var writer = new CodeWriter(outer); if (!string.IsNullOrEmpty(Namespace)) { writer.WriteLine("namespace {0}", Namespace); writer.WriteLine("{"); } writer.Indent += 1; if (!string.IsNullOrEmpty(Region)) { writer.WriteLine("#region {0}", Region); } WriteContext(writer, context); if (!string.IsNullOrEmpty(Region)) { writer.WriteLine("#endregion"); } writer.Indent -= 1; if (!string.IsNullOrEmpty(Namespace)) { writer.WriteLine("}"); } }