protected override void FillPrivateElement(ObjectGeneration obj, FileGeneration fg) { if (obj.IterateFields(includeBaseClass: true).Any(f => f.ReadOnly)) { using (var args = new FunctionWrapper(fg, $"protected static void FillPrivateElement{ModuleNickname}")) { args.Add($"{obj.Interface(getter: false, internalInterface: true)} item"); args.Add($"XElement {XmlTranslationModule.XElementLine.GetParameterName(obj)}"); args.Add("string name"); args.Add($"ErrorMaskBuilder? errorMask"); args.Add($"{nameof(TranslationCrystal)}? translationMask"); } using (new BraceWrapper(fg)) { fg.AppendLine("switch (name)"); using (new BraceWrapper(fg)) { bool isInRange = false; foreach (var field in obj.IterateFields(expandSets: SetMarkerType.ExpandSets.FalseAndInclude, nonIntegrated: true)) { if (field is DataType set) { if (set.HasBeenSet) { fg.AppendLine($"case \"Has{set.EnumName}\":"); using (new DepthWrapper(fg)) { fg.AppendLine($"item.{set.StateName} |= {obj.Name}.{set.EnumName}.Has;"); fg.AppendLine("break;"); } } foreach (var subField in set.IterateFieldsWithMeta()) { if (subField.Field.Derivative) { continue; } if (!subField.Field.ReadOnly) { continue; } if (!subField.Field.IntegrateField) { continue; } if (!this.TryGetTypeGeneration(subField.Field.GetType(), out var generator)) { throw new ArgumentException("Unsupported type generator: " + subField.Field); } fg.AppendLine($"case \"{subField.Field.Name}\":"); using (new DepthWrapper(fg)) { if (generator.ShouldGenerateCopyIn(subField.Field)) { generator.GenerateCopyIn( fg: fg, objGen: obj, typeGen: subField.Field, nodeAccessor: XmlTranslationModule.XElementLine.GetParameterName(obj).Result, itemAccessor: Accessor.FromType(subField.Field, "item"), translationMaskAccessor: "translationMask", errorMaskAccessor: $"errorMask"); } HandleDataTypeParsing(obj, fg, set, subField, ref isInRange); fg.AppendLine("break;"); } } } else if (field.IntegrateField) { if (field.Derivative) { continue; } if (!field.ReadOnly) { continue; } if (!this.TryGetTypeGeneration(field.GetType(), out var generator)) { throw new ArgumentException("Unsupported type generator: " + field); } fg.AppendLine($"case \"{field.Name}\":"); using (new DepthWrapper(fg)) { if (generator.ShouldGenerateCopyIn(field)) { generator.GenerateCopyIn( fg: fg, objGen: obj, typeGen: field, nodeAccessor: XmlTranslationModule.XElementLine.GetParameterName(obj).Result, itemAccessor: Accessor.FromType(field, "item"), translationMaskAccessor: "translationMask", errorMaskAccessor: $"errorMask"); } fg.AppendLine("break;"); } } } fg.AppendLine("default:"); using (new DepthWrapper(fg)) { if (obj.HasLoquiBaseObject) { using (var args = new ArgsWrapper(fg, $"{obj.BaseClass.CommonClass(LoquiInterfaceType.ISetter, CommonGenerics.Class, MaskType.Normal)}.FillPrivateElement{ModuleNickname}{obj.GetBaseMask_GenericTypes(MaskType.Error)}")) { args.Add("item: item"); args.Add($"{XmlTranslationModule.XElementLine.GetParameterName(obj)}: {XmlTranslationModule.XElementLine.GetParameterName(obj)}"); args.Add("name: name"); args.Add("errorMask: errorMask"); if (this.TranslationMaskParameter) { args.Add($"translationMask: translationMask"); } } } fg.AppendLine("break;"); } } } fg.AppendLine(); } }
protected virtual void FillPublicElement(ObjectGeneration obj, StructuredStringBuilder sb) { using (var args = new Function(sb, $"public static void FillPublicElement{ModuleNickname}")) { args.Add($"{obj.Interface(getter: false)} item"); args.Add($"XElement {XElementLine.GetParameterName(obj, Context.Backend)}"); args.Add("string name"); args.Add($"ErrorMaskBuilder? errorMask"); args.Add($"{nameof(TranslationCrystal)}? translationMask"); } using (sb.CurlyBrace()) { sb.AppendLine("switch (name)"); using (sb.CurlyBrace()) { foreach (var field in obj.IterateFields()) { if (field.Derivative) { continue; } if (field.ReadOnly) { continue; } if (!TryGetTypeGeneration(field.GetType(), out var generator)) { throw new ArgumentException("Unsupported type generator: " + field); } sb.AppendLine($"case \"{field.Name}\":"); using (sb.IncreaseDepth()) { if (generator.ShouldGenerateCopyIn(field)) { List <string> conditions = new List <string>(); if (TranslationMaskParameter) { conditions.Add(field.GetTranslationIfAccessor("translationMask")); } if (conditions.Count > 0) { using (var args = sb.If(ands: true)) { foreach (var item in conditions) { args.Add(item); } } } using (sb.CurlyBrace(doIt: conditions.Count > 0)) { generator.GenerateCopyIn( sb: sb, objGen: obj, typeGen: field, nodeAccessor: XElementLine.GetParameterName(obj, Context.Backend).Result, itemAccessor: Accessor.FromType(field, "item"), translationMaskAccessor: "translationMask", errorMaskAccessor: $"errorMask"); } } sb.AppendLine("break;"); } } sb.AppendLine("default:"); using (sb.IncreaseDepth()) { if (obj.HasLoquiBaseObject) { using (var args = sb.Call( $"{obj.BaseClass.CommonClassName(LoquiInterfaceType.ISetter)}.FillPublicElement{ModuleNickname}{obj.GetBaseMask_GenericTypes(MaskType.Error)}")) { args.Add("item: item"); args.Add($"{XElementLine.GetParameterName(obj, Context.Backend)}: {XElementLine.GetParameterName(obj, Context.Backend)}"); args.Add("name: name"); args.Add("errorMask: errorMask"); if (TranslationMaskParameter) { args.Add($"translationMask: translationMask"); } } } sb.AppendLine("break;"); } } } sb.AppendLine(); }