static void WriteReductionMethod(TextWriter writer, ConfigCommandMethod method) { writer.Write(" protected abstract Type_"); writer.Write(method.Using.Label.Text); writer.Write(' '); writer.Write(method.Name.Text); writer.Write('('); var paramNames = GetParamNames(method); if (method.Arguments.Count > 0) { WriteSegmentType(writer, method.Arguments[0]); writer.Write(' '); writer.Write(paramNames[0]); for (var i = 1; i < method.Arguments.Count; i++) { writer.Write(", "); WriteSegmentType(writer, method.Arguments[i]); writer.Write(' '); writer.Write(paramNames[i]); } } writer.WriteLine(");"); }
void IConfigCommandVisitor.Visit(ConfigCommandMethod method) { foreach (var command in method.Arguments) { command.Apply(this); } }
void IConfigCommandVisitor.Visit(ConfigCommandMethod method) { _writer.Write(method.Name.Text); _writer.Write("("); using (IEnumerator <ConfigCommand> enumerator = method.Arguments.GetEnumerator()) { if (enumerator.MoveNext()) { enumerator.Current.Apply(this); while (enumerator.MoveNext()) { _writer.Write(", "); enumerator.Current.Apply(this); } } } _writer.Write(")"); }
static string[] GetParamNames(ConfigCommandMethod method) { var lookup = new Dictionary <string, List <int> >(); for (var i = 0; i < method.Arguments.Count; i++) { var argument = method.Arguments[i]; var segmentName = argument.Segment.Name; var name = CamelCase(segmentName) + "Seg"; if (!lookup.TryGetValue(name, out var list)) { list = new List <int>(); lookup.Add(name, list); } list.Add(i); } var result = new string[method.Arguments.Count]; foreach (var pair in lookup) { if (pair.Value.Count == 1) { result[pair.Value[0]] = pair.Key; } else { for (var i = 0; i < pair.Value.Count; i++) { result[pair.Value[i]] = pair.Key + (i + 1); } } } return(result); }