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;
 }