public void WriteCode(CsCodeWriter cw) { if (!string.IsNullOrEmpty(_input.Comment)) { var lines = _input.Comment.Split('\r', '\n').Where(a => !string.IsNullOrWhiteSpace(a)); foreach (var i in lines) { cw.WriteLine("// " + i); } } if (_input.Throw) { cw.WriteLine("// " + _input.OperatorParameters.DebugIs); cw.WriteLine("throw new " + nameof(NotImplementedException) + "();"); return; } var right = OperatorParameters.RightMethodArgumentName; var left = OperatorParameters.LeftMethodArgumentName; foreach (var i in _input.Vars) { cw.WriteAssign(i.Name, i.Code, true); } if (!string.IsNullOrEmpty(RightValue)) { right += "Converted"; cw.WriteAssign(right, RightValue, true); } if (string.IsNullOrEmpty(_input.UseReturnExpression)) { var value = string.IsNullOrEmpty(_input.UseValueExpression) ? $"{left}.Value {OperatorParameters.Oper} {right}.Value" : _input.UseValueExpression; if (!string.IsNullOrEmpty(_input.ResultMultiplication)) { value += " * " + _input.ResultMultiplication; } cw.WriteAssign("value", value, true); var code = new CsArguments("value", ResultUnit).Create(OperatorParameters.Result.Value.ValueTypeName); cw.WriteReturn(code); } else { cw.WriteReturn(_input.UseReturnExpression); } }
private static void AddConstructor(CsClass csStruct, KeysGeneratorDef def) { var propName = def.ValuePropertyName; var argName = propName.FirstLower(); var cs = new CsCodeWriter(); if (def.WrappedType == WrappedTypes.String) { var args = new CsArguments($"nameof({argName})"); var exception = args.Create(csStruct.GetTypeName <NullReferenceException>()); cs.SingleLineIf($"{argName} is null", $"throw {exception};"); exception = args.Create(csStruct.GetTypeName <ArgumentException>()); cs.SingleLineIf($"{argName}.Length == 0", $"throw {exception};"); cs.WriteAssign(propName, $"{argName}.Trim()"); } else { cs.WriteAssign(propName, argName); } csStruct.AddConstructor() .WithParameter(new CsMethodParameter(argName, def.CsWrappedType)) .WithBody(cs); for (var i = 0; i < 2; i++) { var eq = i == 0; var m = csStruct.AddMethod(eq ? "==" : "!=", "bool", eq ? "Equality operator" : "Inequality operator") .WithBody($"return {(eq ? "" : "!")}left.Equals(right);"); m.AddParam("left", csStruct.Name, "first value to compare"); m.AddParam("right", csStruct.Name, "second value to compare"); } }
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); }