Exemple #1
0
        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();
            }
        }
Exemple #2
0
    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();
    }