private bool AddConstructor(IClass cl) { RDomConstructor constructor = CreateRDomConstructor(cl); triviaManager.StoreStringWhitespace(constructor, LanguageElement.ParameterEndDelimiter, "", "\r\n"); triviaManager.StoreStringWhitespace(constructor, LanguageElement.ConstructorInitializerPrefix, " ", ""); var properties = cl.Properties.Where(x => x.CanSet && x.CanGet); var assignments = new List <IAssignmentStatement>(); assignments.Add(new RDomAssignmentStatement( RDom.CSharp.ParseExpression("NeedsFormatting"), RDom.CSharp.ParseExpression("true"))); triviaManager.StoreStringWhitespace(assignments.First(), LanguageElement.EndOfLine, "", "\r\n"); var altConstructorPairs = new List <Tuple <RDomParameter, RDomParameter, RDomArgument> >(); foreach (var prop in properties) { RDomParameter param = CreateParameter(assignments, altConstructorPairs, prop); constructor.Parameters.AddOrMove(param); } constructor.StatementsAll.AddOrMoveRange(assignments); if (altConstructorPairs.Any()) { IConstructor altConstructor = CreateAlternateConstructor(constructor, altConstructorPairs); cl.InsertAfterInitialFields(altConstructor); } return(true); }
private static IConstructor CreateAlternateConstructor(RDomConstructor constructor, List <Tuple <RDomParameter, RDomParameter, RDomArgument> > altConstructorPairs) { var altConstructor = constructor.Copy(); var argList = new List <RDomArgument>(); var replaceList = new List <Tuple <IParameter, RDomParameter> >(); foreach (var param in altConstructor.Parameters) { var switchTuples = altConstructorPairs.Where(x => x.Item1.Name == param.Name); if (switchTuples.Any()) { var switchTuple = switchTuples.First(); replaceList.Add(Tuple.Create(param, switchTuple.Item2)); argList.Add(switchTuple.Item3); } else { argList.Add(new RDomArgument(RDom.CSharp.ParseExpression(param.Name))); } } foreach (var tuple in replaceList) { altConstructor.Parameters.Replace(tuple.Item1, tuple.Item2); } altConstructor.ConstructorInitializerType = ConstructorInitializerType.This; altConstructor.InitializationArguments.Clear(); altConstructor.InitializationArguments.AddOrMoveRange(argList); return(altConstructor); }
private static RDomConstructor CreateRDomConstructor(IClass cl) { var constructor = new RDomConstructor(cl.Name, AccessModifier.Public, constructorInitializerType: ConstructorInitializerType.This); var nullParam = new RDomArgument(RDom.CSharp.ParseExpression("null")); constructor.InitializationArguments.AddOrMoveRange(new IArgument[] { nullParam, nullParam.Copy(), nullParam.Copy() }); cl.InsertAfterInitialFields(constructor); return constructor; }
private static RDomConstructor CreateRDomConstructor(IClass cl) { var constructor = new RDomConstructor(cl.Name, AccessModifier.Public, constructorInitializerType: ConstructorInitializerType.This); var nullParam = new RDomArgument(RDom.CSharp.ParseExpression("null")); constructor.InitializationArguments.AddOrMoveRange(new IArgument[] { nullParam, nullParam.Copy(), nullParam.Copy() }); cl.InsertAfterInitialFields(constructor); return(constructor); }
private static IConstructor CreateAlternateConstructor(RDomConstructor constructor, List<Tuple<RDomParameter, RDomParameter, RDomArgument>> altConstructorPairs) { var altConstructor = constructor.Copy(); var argList = new List<RDomArgument>(); var replaceList = new List<Tuple<IParameter, RDomParameter>>(); foreach (var param in altConstructor.Parameters) { var switchTuples = altConstructorPairs.Where(x => x.Item1.Name == param.Name); if (switchTuples.Any()) { var switchTuple = switchTuples.First(); replaceList.Add(Tuple.Create(param, switchTuple.Item2)); argList.Add(switchTuple.Item3); } else { argList.Add(new RDomArgument(RDom.CSharp.ParseExpression(param.Name))); } } foreach (var tuple in replaceList) { altConstructor.Parameters.Replace(tuple.Item1, tuple.Item2); } altConstructor.ConstructorInitializerType = ConstructorInitializerType.This; altConstructor.InitializationArguments.Clear(); altConstructor.InitializationArguments.AddOrMoveRange(argList); return altConstructor; }