private (string signature, string code, bool isCompoundValue) createMethod(Type type, string name, string indent) { if (SignatureString.For.ContainsKey(type)) { return( SignatureString.For[type], decoder + ".Get" + type.Name, false ); } else { var decoderGenerator = new DecoderGenerator(decoder, message); decoderGenerator.add(name + "_inner", type, indent + " "); return( decoderGenerator.Signature, @"() => " + indent + @"{ " + decoderGenerator.Result + @" " + indent + "return " + name + @"_inner; " + indent + "}", decoderGenerator.IsCompoundValue ); } }
private (string signature, string code, bool isCompoundValue) buildFromConstructor(string name, Type type, string indent) { var constructorParameters = type.GetTypeInfo() .GetConstructors() .Select(x => x.GetParameters()) .OrderByDescending(x => x.Length) .First() ; var builder = new StringBuilder(); builder.AppendLine(decoder + ".AdvanceToCompoundValue();"); var signature = "("; foreach (var p in constructorParameters) { var decoderGenerator = new DecoderGenerator(decoder, message); decoderGenerator.add(name + "_" + p.Name, p.ParameterType, indent); signature += decoderGenerator.Signature; builder.Append(decoderGenerator.Result); } signature += ")"; builder.Append(indent); builder.Append("var " + name + " = new " + Generator.BuildTypeString(type) + "("); builder.Append(string.Join(", ", constructorParameters.Select(x => name + "_" + x.Name))); builder.Append(");"); return(signature, builder.ToString(), true); }