CodeGen
 All Classes Namespaces Files Functions Variables Properties Pages
Groovy.cs
Go to the documentation of this file.
1 using System.Linq;
2 
3 namespace CodeGen.generators
4 {
9  public class GroovyGenerator : Generator
10  {
11  private const string ClassFormat = "{0}class {1}{2}{{{3}{4}{5}}}";
12  private string Indent { get; set; } = GeneratorConf.GetIndent(true, 4);
13 
15  protected override string GenerateClass(Class @class)
16  {
17  string fields = "", inherits = " ", methods = "", classes = "";
18  if (@class.Parent?.Length > 0)
19  {
20  inherits = " extends " + @class.Parent + ' ';
21  }
22 
23  fields = @class.Fields?.Aggregate('\n' + fields,
24  (current, field) => current + GenerateField(field) + '\n');
25 
26  methods = @class.Methods?.Aggregate(methods,
27  (current, method) => current + '\n' + GeneratorConf.ShiftCode(GenerateMethod(method), 1, Indent) + '\n');
28 
29  classes = @class.Classes?.Aggregate(classes,
30  (current, cls) => current + '\n' + GeneratorConf.ShiftCode(GenerateClass(cls), 1, Indent) + '\n');
31 
32  var access = "";
33  if (@class.Access?.Length > 0)
34  {
35  access = @class.Access + " ";
36  }
37 
38  return string.Format(ClassFormat, access, @class.Name, inherits, fields, methods, classes);;
39  }
40 
42  public override string GenerateField(Field field)
43  {
44  var result = Indent;
45  if (field.Access == "" || field.Access == "default")
46  {
47  result += "private ";
48  }
49  else
50  {
51  result += field.Access + ' ';
52  }
53 
54  if (field.Static)
55  {
56  result += "static ";
57  }
58 
59  switch (field.Type)
60  {
61  case "string":
62  result += "String ";
63  break;
64  default:
65  result += field.Type + ' ';
66  break;
67  }
68 
69  result += field.Name;
70  if (field.Default?.Length > 0)
71  {
72  result += " = " + field.Default;
73  }
74  return result;
75  }
76 
78  public override string GenerateMethod(Method method)
79  {
80  var result = "";
81  if (method.Access == "" || method.Access == "default")
82  {
83  result += "private ";
84  }
85  else
86  {
87  result += method.Access + ' ';
88  }
89 
90  switch (method.Type)
91  {
92  case "string":
93  result += "String ";
94  break;
95  case "":
96  result += "void ";
97  break;
98  default:
99  result += method.Type + ' ';
100  break;
101  }
102 
103  result += method.Name + '(';
104 
105  for (var i = 0; i < method.Parameters?.Length; i++)
106  {
107  var parameter = method.Parameters[i];
108  if (parameter.Type == "string")
109  {
110  parameter.Type = "String";
111  }
112 
113  result += parameter.Type + ' ' + parameter.Name;
114  if (i + 1 < method.Parameters.Length)
115  {
116  result += ", ";
117  }
118  }
119 
120  result += ") {";
121 
122  if (method.Type?.Length > 0)
123  {
124  result += '\n' + Indent + "return 0\n";
125  }
126 
127  result += '}';
128  return result;
129  }
130  }
131 }
string Type
Represents return type of the method. Type: string
Definition: Models.cs:178
The structure that describes class. Contains name, array of fields, methods and subclasses, parent class name, access specifier. Overrides ToString() method.
Definition: Models.cs:48
string Type
Represents the type of the variable. Type: string
Definition: Models.cs:108
bool Static
Denotes if field is static or not. Type: boolean
Definition: Models.cs:139
Parameter[] Parameters
Represents parameters of the method. Type: array of type Parameter
Definition: Models.cs:202
Holds the configuration of generator
override string GenerateMethod(Method method)
Method generator: generates method from given method object Method objectString of generated code of ...
Definition: Groovy.cs:78
override string GenerateClass(Class @class)
Class generator: generates class with fields, methods and subclasses from given class object Class ob...
Definition: Groovy.cs:15
override string GenerateField(Field field)
Field generator: generates field from given field object Field objectString of generated code of fiel...
Definition: Groovy.cs:42
Generator for Groovy
Definition: Groovy.cs:9
static string ShiftCode(string code, int num, string indent)
Shifts code using given parameters
string Access
Represents access level of the field. Type: string
Definition: Models.cs:127
string Default
Represents default value of the varibale. Type: string
Definition: Models.cs:114
Interface of language generator
string Access
Represents access level of the method. Type: string
Definition: Models.cs:184
The structure that describes method. Contains name, return type, access level, const and static prope...
Definition: Models.cs:166
The structure that describes field. Contains access, const and static properties. Inherits from Varia...
Definition: Models.cs:121