public static string Changer(string changerName, List <string> routingComments, List <BranchData> brancheSourcesList, FinallyBranchData finallyBranch) { var classCommentBase = new List <string> { changerName, "generated Changer by Automatine." }; classCommentBase.AddRange(routingComments); var brancheSources = new List <ChangerBranchData>(); foreach (var branch in brancheSourcesList) { brancheSources.Add(new ChangerBranchData(branch)); } var classDesc = new NoConstructorClassDescriptor( new List <string> { "System", "Automatine" }, classCommentBase, "public", string.Empty, AutomatineDefinitions.Changer.CLASS_HEADER + changerName + " : " + AutomatineDefinitions.Changer.INTERFACE_NAME, () => { var source = new ChangerMethodDesc(changerName, brancheSources, finallyBranch); return(source.data); }, () => { var source = new ChangerShouldImplementMethodDesc(changerName, brancheSources, finallyBranch); return(source.data); } ); return(classDesc.data); }
public ChangerShouldImplementMethodDesc(string changerName, List <ChangerBranchData> brancheSources, FinallyBranchData finallyBranch) { var str = new List <string> { // add empty line. string.Empty, " public Func<Auto<InitialParamType, UpdateParamType>, int, InitialParamType, Auto<InitialParamType, UpdateParamType>> Changer<InitialParamType, UpdateParamType> () {", " return delegate (Auto<InitialParamType, UpdateParamType> auto, int frame, InitialParamType fixedContext) {", " return "+ changerName + "(auto, frame, fixedContext);", " };", " }", "", " public string ChangerName () {", " return \""+ changerName + "\";", " }", string.Empty }; /* * add Effective checker. */ var effectiveCheckerBrancheDescs = ChangerMethodDesc.GenerateEffectiveCheckBranchDescs(brancheSources); str.Add( " public bool IsEffective<InitialParamType, UpdateParamType> (Auto<InitialParamType, UpdateParamType> baseAuto) {" ); // add branch condition. if (effectiveCheckerBrancheDescs.Any()) { str.AddRange( new List <string> { " var conditions = baseAuto.Conditions();", " " } ); foreach (var effectiveCheckerBrancheDesc in effectiveCheckerBrancheDescs) { str.Add(effectiveCheckerBrancheDesc.data); } } if (finallyBranch.IsExists()) { str.AddRange( new List <string> { " // finally is ON.", " return true;" } ); } else { str.Add( " return false;" ); } str.Add( " }" ); data = string.Join("\n", str.ToArray()); }