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}"); } }
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}"); } } }