1 package net.sourceforge.jenesis4java.example;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 import net.sourceforge.jenesis4java.Access;
26 import net.sourceforge.jenesis4java.ClassField;
27 import net.sourceforge.jenesis4java.ClassMethod;
28 import net.sourceforge.jenesis4java.CompilationUnit;
29 import net.sourceforge.jenesis4java.PackageClass;
30 import net.sourceforge.jenesis4java.Type;
31 import net.sourceforge.jenesis4java.Variable;
32 import net.sourceforge.jenesis4java.VirtualMachine;
33
34
35
36
37
38 class SimpleGenerator {
39
40 private final VirtualMachine vm;
41
42 private CompilationUnit unit;
43
44 private PackageClass cls;
45
46
47
48
49 private SimpleGenerator() {
50 this.vm = VirtualMachine.getVirtualMachine();
51 }
52
53 public static void main(String[] argv) throws Exception {
54 VirtualMachine vm = VirtualMachine.getVirtualMachine();
55 SimpleGenerator gen = new SimpleGenerator();
56 gen.initialize("/tmp", "com.mycom.myproject", "Test");
57 gen.addMember(vm.newType("String"), "name");
58 gen.addMember(vm.newArray(Type.INT, 1), "array1");
59 gen.addMember(vm.newArray(Type.INT, 2), "array2");
60 gen.generate();
61 }
62
63
64
65
66
67
68 private void addMember(Type type, String name) {
69
70 Variable thisvar = this.vm.newVar("this." + name);
71 Variable var = this.vm.newVar(name);
72
73
74 ClassField field = this.cls.newField(type, name);
75 field.setAccess(Access.PRIVATE);
76
77
78 ClassMethod m1 = this.cls.newMethod(type, "get" + capitalize(name));
79 m1.setAccess(Access.PUBLIC);
80 m1.newReturn().setExpression(thisvar);
81
82
83 ClassMethod m2 = this.cls.newMethod(type, "set" + capitalize(name));
84 m2.setAccess(Access.PUBLIC);
85 m2.addParameter(type, name);
86 m2.newStmt(this.vm.newAssign(thisvar, var));
87 }
88
89
90
91
92
93 private void generate() {
94 this.unit.encode();
95 }
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111 private void initialize(String codebase, String packageName, String className) {
112 this.unit = this.vm.newCompilationUnit(codebase);
113 this.unit.setNamespace(packageName);
114
115 this.cls = this.unit.newClass(className);
116 this.cls.setAccess(Access.PUBLIC);
117 }
118
119 private String capitalize(String s) {
120 char[] chars = s.toCharArray();
121 chars[0] = Character.toUpperCase(chars[0]);
122 return new String(chars);
123 }
124 }