예제 #1
0
        protected void Add_Constructor(Col1 col)
        {
            var target = Target;
            var code   = new CsCodeWriter();
            var m      = target.AddConstructor("creates instance of " + target.Name);
            var c      = col.Writer1.Code;

            if (!string.IsNullOrEmpty(c))
            {
                code.WriteLine(c);
            }
            foreach (var i in col.Items)
            {
                var flags = i.CheckingFlags;
                code.CheckArgument(i.ArgName, flags.ConvertToArgChecking(), Target);
                var p = m.AddParam(i.PropertyName.FirstLower(), i.PropertyType, i.Description);
                if ((flags & Flags1.Optional) != 0)
                {
                    p.ConstValue = "null";
                }

                /*if ((flags & Flags1.TrimValue) != 0)
                 * {
                 *  code.WriteLine("{0} = {0}?.Trim();", i.ArgName);
                 *  flags &= ~Flags1.TrimValue;
                 *
                 *  if ((flags & Flags1.NotWhitespace) != 0)
                 *  {
                 *      flags &= ~Flags1.NotWhitespace;
                 *      flags |= Flags1.NotEmpty;
                 *  }
                 * }*/

                /*if ((flags & Flags1.NotNull) != 0)
                 * {
                 *  flags &= ~Flags1.NotNull;
                 *  p.Attributes.Add(CsAttribute.Make<NotNullAttribute>(target));
                 *  var throwCode = new Args($"nameof({i.ArgName})")
                 *      .Throw<NullReferenceException>(target);
                 *  code.SingleLineIf($"{i.ArgName} is null", throwCode);
                 * }*/

                /*if ((flags & Flags1.NotWhitespace) != 0)
                 * {
                 *  flags &= ~(Flags1.NotEmpty | Flags1.NotWhitespace);
                 *  // var m = nameof(string.IsNullOrWhiteSpace);
                 *  var throwCode = new Args($"nameof({i.ArgName})")
                 *      .Throw<ArgumentException>(target);
                 *  code.SingleLineIf($"string.IsNullOrWhiteSpace({i.ArgName})", throwCode);
                 *
                 *  flags &= ~(Flags1.NotNullOrWhitespace | Flags1.NotNullOrEmpty);
                 * }
                 *
                 * if ((flags & Flags1.NotEmpty) != 0)
                 * {
                 *  flags &= ~Flags1.NotEmpty;
                 *  //var m = nameof(string.IsNullOrEmpty);
                 *  var throwCode = new Args($"nameof({i.ArgName})")
                 *      .Throw<ArgumentException>(target);
                 *  code.SingleLineIf($"string.IsNullOrEmpty({i.ArgName})", throwCode);
                 *
                 *  flags &= ~(Flags1.NotNullOrWhitespace | Flags1.NotNullOrEmpty);
                 * }*/

                if ((flags & Flags1.DoNotAssignProperty) == 0)
                {
                    code.WriteAssign(i.PropertyName, i.Expression);
                }
            }

            c = col.Writer2.Code;
            if (!string.IsNullOrEmpty(c))
            {
                code.WriteLine(c);
            }

            m.WithBody(code);
        }