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()); }
public ChangerMethodDesc(string changerName, List <ChangerBranchData> brancheSources, FinallyBranchData finallyBranch) { var changerBranches = GenerateChangerBranchDescs(brancheSources); // add Changer method. var str = new List <string> { " public static Auto<InitialParamType, UpdateParamType> ", " "+ changerName, " <InitialParamType, UpdateParamType>", " (Auto<InitialParamType, UpdateParamType> baseAuto, int frame, InitialParamType fixedContext)", " {" }; if (changerBranches.Any()) { str.AddRange( new List <string> { " var conditions = baseAuto.Conditions();", " " } ); } var branchesDesc = changerBranches.Select(branch => branch.data).ToList(); str.AddRange(branchesDesc); if (finallyBranch.IsExists()) { var finallyAuto = finallyBranch.finallyAutoId; var finallyInherits = finallyBranch.inheritTimelineConditions; str.AddRange( new List <string> { " var finallyAuto = new ", " "+ finallyAuto, " <InitialParamType, UpdateParamType>(frame, fixedContext);" } ); if (finallyInherits.Any()) { var inheritsWithClass = finallyInherits.Select(inheritType => "typeof(AutoConditions." + inheritType + ")").ToArray(); var inheritConditions = string.Join(", ", inheritsWithClass); str.AddRange( new List <string> { " finallyAuto.InheritTimelines(baseAuto.ExportTimelines(new Type[] {", " "+ inheritConditions, " }));" } ); } str.Add( " return finallyAuto;" ); } else { str.Add( " return baseAuto;" ); } str.Add( " }" ); // add empty line. str.Add(string.Empty); var effectiveCheckerBrancheDescs = GenerateEffectiveCheckBranchDescs(brancheSources); /* * add IsEffective method. */ str.Add( " public static bool IsEffectiveChanger<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()); }