-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathClass.cs
More file actions
127 lines (107 loc) · 3.45 KB
/
Class.cs
File metadata and controls
127 lines (107 loc) · 3.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
namespace M31.FluentApi.Generator.CodeBuilding;
internal class Class : ICode
{
private readonly List<Field> fields;
private readonly List<Method> methods;
private readonly List<MethodSignature> methodSignatures;
private readonly List<Property> properties;
private readonly List<string> interfaces;
private readonly List<ICode> definitions;
internal Class(string name)
{
Name = name;
Generics = new Generics();
Modifiers = new Modifiers();
fields = new List<Field>();
methods = new List<Method>();
methodSignatures = new List<MethodSignature>();
properties = new List<Property>();
interfaces = new List<string>();
definitions = new List<ICode>();
}
internal string Name { get; }
internal Generics Generics { get; }
internal Modifiers Modifiers { get; }
internal IReadOnlyCollection<Field> Fields => fields;
internal IReadOnlyCollection<Method> Methods => methods;
internal IReadOnlyCollection<MethodSignature> MethodSignatures => methodSignatures;
internal IReadOnlyCollection<Property> Properties => properties;
internal IReadOnlyCollection<string> Interfaces => interfaces;
internal IReadOnlyCollection<ICode> Definitions => definitions;
internal void AddGenericParameter(string parameter, IEnumerable<string> constraints)
{
Generics.AddGenericParameter(parameter, constraints);
}
internal void AddModifiers(params string[] modifiers)
{
Modifiers.Add(modifiers);
}
internal void AddModifiers(IEnumerable<string> modifiers)
{
Modifiers.Add(modifiers);
}
internal void AddField(Field field)
{
fields.Add(field);
}
internal void AddMethod(Method method)
{
methods.Add(method);
}
internal void AddMethodSignature(MethodSignature methodSignature)
{
methodSignatures.Add(methodSignature);
}
internal void AddProperty(Property property)
{
properties.Add(property);
}
internal void AddInterface(string interfaceName)
{
interfaces.Add(interfaceName);
}
internal void AddDefinition(ICode definition)
{
definitions.Add(definition);
}
public CodeBuilder AppendCode(CodeBuilder codeBuilder)
{
codeBuilder
.StartLine()
.Append(Modifiers)
.Append($"class {Name}")
.Append(Generics.Parameters);
if (interfaces.Count == 1)
{
codeBuilder.Append(" : ");
codeBuilder.Append(interfaces[0]);
}
if (interfaces.Count > 1)
{
codeBuilder.Append(" :");
codeBuilder.EndLine();
codeBuilder.Indent();
foreach (string @interface in interfaces.Take(interfaces.Count - 1))
{
codeBuilder.AppendLine($"{@interface},");
}
codeBuilder.AppendLine(interfaces[interfaces.Count - 1]);
codeBuilder.Unindent();
}
return codeBuilder
.EndLine()
.Indent()
.Append(Generics.Constraints)
.EndLine()
.Unindent()
.OpenBlock()
.Append(fields)
.BlankLine()
.Append(properties)
.BlankLine()
.AppendWithBlankLines(methods)
.AppendWithBlankLines(definitions)
.AppendWithBlankLines(methodSignatures)
.CloseBlock();
}
}