Exemple #1
0
    private void WrapSetAccessor(
        StructuredStringBuilder sb,
        string linePrefix,
        Action <StructuredStringBuilder> toDo)
    {
        StructuredStringBuilder subFg = new StructuredStringBuilder();

        WrapSetCode(subFg, toDo);
        if (subFg.Count > 1)
        {
            sb.AppendLine(linePrefix);
            using (sb.CurlyBrace())
            {
                sb.AppendLines(subFg);
            }
        }
        else if (subFg.Count > 0)
        {
            sb.AppendLine($"{linePrefix} => {subFg[0]}");
        }
        else
        {
            sb.AppendLine($"{linePrefix}");
        }
    }
Exemple #2
0
    public override async Task GenerateForClass(StructuredStringBuilder sb)
    {
        void GenerateTypicalNullableMembers(bool notifying)
        {
            Comments?.Apply(sb, LoquiInterfaceType.Direct);
            sb.AppendLine($"public {OverrideStr}{TypeName(getter: false)}{NullChar} {Name} {{ get; {(ReadOnly ? "protected " : string.Empty)}set; }}{(HasDefault ? $" = {DefaultValueMemberName};" : null)}");
            sb.AppendLine($"[DebuggerBrowsable(DebuggerBrowsableState.Never)]");
            sb.AppendLine($"{TypeName(getter: true)}{NullChar} {ObjectGen.Interface(getter: true, internalInterface: InternalGetInterface)}.{Name} => this.{Name};");
        }

        if (HasDefault)
        {
            Comments?.Apply(sb, LoquiInterfaceType.Direct);
            sb.AppendLine($"public readonly static {TypeName(getter: false)} {DefaultValueMemberName} = {DefaultValue};");
        }
        if (Nullable)
        {
            if (!TrueReadOnly)
            {
                GenerateTypicalNullableMembers(false);
            }
            else
            {
                Comments?.Apply(sb, LoquiInterfaceType.Direct);
                sb.AppendLine($"public readonly {TypeName(getter: false)} {Name};");
                sb.AppendLine($"{TypeName(getter: false)} {ObjectGen.Interface(getter: true, internalInterface: InternalGetInterface)}.{Name} => this.{Name};");
            }
        }
        else
        {
            var subFg = new StructuredStringBuilder();
            WrapSetAccessor(subFg,
                            linePrefix: $"{SetPermissionStr}set",
                            toDo: subGen =>
            {
                if (subGen.Count == 0)
                {
                    return;
                }
                subGen.AppendLine($"this._{Name} = value;");
            });
            if (subFg.Count > 1)
            {
                sb.AppendLine($"[DebuggerBrowsable(DebuggerBrowsableState.Never)]");
                sb.AppendLine($"private {TypeName(getter: false)} _{Name};");
                Comments?.Apply(sb, LoquiInterfaceType.Direct);
                sb.AppendLine($"public {OverrideStr}{TypeName(getter: false)} {Name}");
                using (sb.CurlyBrace())
                {
                    sb.AppendLine($"get => this._{Name};");
                    sb.AppendLines(subFg);
                }
            }
            else if (subFg.Count == 1)
            {
                Comments?.Apply(sb, LoquiInterfaceType.Direct);
                sb.AppendLine($"public {OverrideStr}{TypeName(getter: false)} {Name} {{ get; {subFg[0]}; }} = {(HasDefault ? DefaultValueMemberName : GetDefault(getter: false))};");
            }
            else
            {
                throw new ArgumentException();
            }
            if (!InternalGetInterface && TypeName(getter: true) != TypeName(getter: false))
            {
                sb.AppendLine($"{TypeName(getter: true)} {ObjectGen.Interface(getter: true, internalInterface: InternalGetInterface)}.{Name} => this.{Name};");
            }
        }
        if (InternalSetInterface)
        {
            sb.AppendLine($"[DebuggerBrowsable(DebuggerBrowsableState.Never)]");
            sb.AppendLine($"{TypeName(getter: false)}{NullChar} {ObjectGen.Interface(getter: false, internalInterface: true)}.{Name}");
            using (sb.CurlyBrace())
            {
                sb.AppendLine($"get => this.{Name};");
                sb.AppendLine($"set => this.{Name} = {GetValueSetString("value")};");
            }
        }
        if (InternalGetInterface)
        {
            if (Nullable)
            {
                if (CanBeNullable(getter: true))
                {
                    sb.AppendLine($"{TypeName(getter: false)}? {ObjectGen.Interface(getter: true, internalInterface: true)}.{Name} => this.{Name}");
                }
                else
                {
                    sb.AppendLine($"{TypeName(getter: false)} {ObjectGen.Interface(getter: true, internalInterface: true)}.{Name} => this.{Name}");
                    sb.AppendLine($"bool {ObjectGen.Interface(getter: true, internalInterface: true)}.{Name}_IsSet => this.{Name} != null");
                }
            }
            else
            {
                sb.AppendLine($"{TypeName(getter: false)} {ObjectGen.Interface(getter: true, internalInterface: true)}.{Name} => this.{Name}");
            }
        }
    }