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 package org.exolab.javasource;
44
45 import java.util.Enumeration;
46
47 import org.exolab.castor.builder.SourceGenerator;
48
49
50
51
52
53
54
55
56
57
58 public class JClass extends AbstractJClass {
59
60
61 private JTypeName _superClass;
62
63
64
65
66
67
68 public JClass(final String name) {
69 super(name);
70
71 _superClass = null;
72 }
73
74
75
76
77
78
79
80 public JClass(final String name, boolean useOldFieldNaming) {
81 super(name, useOldFieldNaming);
82
83 _superClass = null;
84 }
85
86
87
88
89 public final void addImport(final String className) {
90 if ((className == null) || (className.length() == 0)) {
91 return;
92 }
93
94 JTypeName jtName = new JTypeName(className);
95
96 String cls = jtName.getLocalName();
97 String pkg = jtName.getPackageName();
98
99
100
101 if (_superClass != null && _superClass.getLocalName().equals(cls)) {
102 if (_superClass.getPackageName() == null && pkg != null) {
103 return;
104 }
105 }
106
107 addImportInternal(className);
108 }
109
110
111
112
113 public void addMember(final JMember jMember) {
114 if (jMember instanceof JField) {
115 addField((JField) jMember);
116 } else if (jMember instanceof JConstant) {
117 addConstant(((JConstant) jMember));
118 } else if (jMember instanceof JMethod) {
119 addMethod((JMethod) jMember);
120 } else {
121 String error = null;
122 if (jMember == null) {
123 error = "the argument 'jMember' must not be null.";
124 } else {
125 error = "Cannot add JMember '" + jMember.getClass().getName()
126 + "' to JClass, unrecognized type.";
127 }
128 throw new IllegalArgumentException(error);
129 }
130 }
131
132
133
134
135
136
137 public final JTypeName getSuperClass() {
138 return _superClass;
139 }
140
141
142
143
144
145
146 public final String getSuperClassQualifiedName() {
147 if (_superClass == null) { return null; }
148 return _superClass.getQualifiedName();
149 }
150
151
152
153
154
155
156 public final void setSuperClass(final String superClass) {
157 if (superClass == null) {
158 _superClass = null;
159 } else {
160 _superClass = new JTypeName(superClass);
161 }
162 }
163
164
165
166
167
168
169
170 public void print(final JSourceWriter jsw, final boolean classOnly) {
171 if (jsw == null) {
172 throw new IllegalArgumentException("argument 'jsw' should not be null.");
173 }
174
175
176 if (!classOnly) {
177 printClassHeaders(jsw);
178 }
179
180 getJDocComment().print(jsw);
181
182 printClassDefinitionLine(jsw);
183
184 jsw.writeln();
185 jsw.indent();
186
187 printConstantDefinitions(jsw);
188 printMemberVariables(jsw);
189 printStaticInitializers(jsw);
190 printConstructors(jsw);
191 printMethods(jsw);
192 printInnerClasses(jsw);
193 printSourceCodeFragments(jsw);
194
195 jsw.unindent();
196 jsw.writeln('}');
197 jsw.flush();
198 }
199
200
201
202
203
204
205
206
207 private void printClassDefinitionLine(final JSourceWriter jsw) {
208 StringBuilder buffer = new StringBuilder(32);
209
210
211 getAnnotatedElementHelper().printAnnotations(jsw);
212
213
214 JModifiers modifiers = getModifiers();
215 if (modifiers.isPrivate()) {
216 buffer.append("private ");
217 } else if (modifiers.isPublic()) {
218 buffer.append("public ");
219 }
220
221 if (modifiers.isFinal()) {
222 buffer.append ("final ");
223 }
224
225 if (modifiers.isAbstract()) {
226 buffer.append("abstract ");
227 }
228
229
230 buffer.append("class ");
231 buffer.append(getLocalName());
232 buffer.append(' ');
233 if (_superClass != null) {
234 buffer.append("extends ");
235 buffer.append(_superClass);
236 buffer.append(' ');
237 }
238 if (getInterfaceCount() > 0) {
239 boolean endl = false;
240 if ((getInterfaceCount() > 1) || (_superClass != null)) {
241 jsw.writeln(buffer.toString());
242 buffer.setLength(0);
243 endl = true;
244 }
245 buffer.append("implements ");
246
247 Enumeration<String> enumeration = getInterfaces();
248 while (enumeration.hasMoreElements()) {
249 buffer.append(enumeration.nextElement());
250 if (enumeration.hasMoreElements()) { buffer.append(", "); }
251 }
252 if (endl) {
253 jsw.writeln(buffer.toString());
254 buffer.setLength(0);
255 } else {
256 buffer.append(' ');
257 }
258 }
259
260
261 buffer.append('{');
262 jsw.writeln(buffer.toString());
263 buffer.setLength(0);
264 }
265
266
267
268
269
270
271 public void changeLocalName(final String localName) {
272 String packageName = getPackageName();
273 if (packageName != null) {
274 setName(packageName + "." + localName);
275 } else {
276 setName(localName);
277 }
278 }
279
280 }