1
2
3
4
5 package xjavadoc;
6
7 import org.apache.commons.collections.Predicate;
8
9 import java.util.List;
10 import java.io.File;
11 import java.io.IOException;
12
13 /***
14 * This class represents any type: source class, binary class or primitive type.
15 *
16 * @author Aslak Hellesøy
17 * @created 7. mars 2003
18 */
19 public interface XClass extends XType
20 {
21 /***
22 * Returns true if this is an inner class.
23 *
24 * @return true if this is an inner class.
25 */
26 public boolean isInner();
27
28 /***
29 * Returns the containing class, if this is an inner class.
30 *
31 * @return the containing class.
32 */
33 public XClass getContainingClass();
34
35 /***
36 * Returns true if this class is a primitive. That is, one of the following:
37 *
38 * <ul>
39 * <li> boolean</li>
40 * <li> byte</li>
41 * <li> char</li>
42 * <li> double</li>
43 * <li> float</li>
44 * <li> int</li>
45 * <li> long</li>
46 * <li> short</li>
47 * <li> java.lang.Boolean</li>
48 * <li> java.lang.Byte</li>
49 * <li> java.lang.Character</li>
50 * <li> java.lang.Double</li>
51 * <li> java.lang.Float</li>
52 * <li> java.lang.Integer</li>
53 * <li> java.lang.Long</li>
54 * <li> java.lang.Short</li>
55 * <li> java.lang.String</li>
56 * </ul>
57 *
58 *
59 * @return true if a primitive
60 */
61 public boolean isPrimitive();
62
63 /***
64 * Returns true if this class is anonymous.
65 *
66 * @return true if this class is anonymous.
67 */
68 public boolean isAnonymous();
69
70 /***
71 * Gets the qualified class name.
72 *
73 * @return the qualified class name.
74 */
75 String getQualifiedName();
76
77 /***
78 * Gets the transformed class name, for example: <code>Character$Subset</code>
79 *
80 * @return the transformed class name.
81 */
82 String getTransformedName();
83
84 /***
85 * Gets the transformed qualified class name, for example: <code>java.lang.Character$Subset</code>
86 *
87 * @return the transformed qualified class name.
88 */
89 String getTransformedQualifiedName();
90
91 /***
92 * Gets the type, e.g. <code>java.lang.String.class</code> or <code>java.lang.Integer.TYPE</code>
93 * .
94 *
95 * @return the qualified class name.
96 */
97 String getType();
98
99 /***
100 * Gets the constructor with the given signature.
101 *
102 * @param constructorNameWithSignature the signature of the constructor, e.g.
103 * <code>Foo(int,java.lang.String)>/code>.
104 *
105 *
106 *
107 *
108 *
109 * @return the constructor.
110 */
111 XConstructor getConstructor( String constructorNameWithSignature );
112
113 XField getField( String name );
114
115 boolean isAbstract();
116
117 /***
118 * Returns true if we are subclass or implement the class/interface with the
119 * name classOrInterfaceName
120 *
121 * @param full_qualified_type_name The full qualified type name
122 * @return true if of the specified type; false
123 * otherwise
124 */
125 boolean isA( String full_qualified_type_name );
126
127 /***
128 * Returns true if we are subclass or implement the class/interface with the
129 * name classOrInterfaceName
130 *
131 * @param full_qualified_type_name The full qualified type name
132 * @param superclases whether the isA search should search the
133 * whole hierarchy
134 * @return true if of the specified type; false
135 * otherwise
136 */
137 boolean isA( String full_qualified_type_name, boolean superclases );
138
139 /***
140 * Return superclass of this class. If this class represents an interface, null
141 * will be returned.
142 *
143 * @return superclass of this class
144 */
145 XClass getSuperclass();
146
147 /***
148 * Returns the (known) direct subclasses. If this instance represents an
149 * interface, UnsupportedOperationException will be thrown. This can be avoided
150 * by testing with isInterface() prior to calling this method.
151 *
152 * @return the (known) subclasses
153 */
154 List getDirectSubclasses();
155
156 /***
157 * Returns the (known) subclasses, regardless of how deep in the class
158 * hierarchy. If this instance represents an interface,
159 * UnsupportedOperationException will be thrown. This can be avoided by testing
160 * with isInterface() prior to calling this method.
161 *
162 * @return the (known) subclasses
163 */
164 List getAllSubclasses();
165
166 /***
167 * Return the (known) classes that implement this interface. If this instance
168 * represents a class, an UnsupportedOperationException will be thrown. This
169 * can be avoided by testing with isInterface() prior to calling this method.
170 *
171 * @return the (known) subinterfaces
172 */
173 List getImplementingClasses();
174
175 /***
176 * Return the (known) interfaces that extend this interface. If this instance
177 * represents a class, an UnsupportedOperationException will be thrown. This
178 * can be avoided by testing with isInterface() prior to calling this method.
179 *
180 * @return the (known) extending interfaces
181 */
182 List getExtendingInterfaces();
183
184 /***
185 * Returns all the interfaces implemented by this class. If this class
186 * represents an interface, it will return all the interfaces that this
187 * interface extends.
188 *
189 * @return a Collection of {@link XClass}.
190 */
191 List getInterfaces();
192
193 /***
194 * Returns an XMethod with the given name and parameters. Example:
195 * getMethod("hello",new String[]{"java.lang.String","int"});
196 *
197 * @param methodNameWithSignature Describe what the parameter does
198 * @param superclasses Looks in superclasses too if true
199 * @return The XMethod if found, otherwise null
200 */
201 XMethod getMethod( String methodNameWithSignature, boolean superclasses );
202
203 /***
204 * @param methodNameWithSignature
205 * @return The XMethod if found, otherwise null
206 */
207 XMethod getMethod( String methodNameWithSignature );
208
209 String save( File rootDir ) throws IOException;
210
211 /***
212 * Returns the package this class lives in.
213 *
214 * @return the package this class lives in.
215 */
216 XPackage getContainingPackage();
217
218 /***
219 * Returns the imported classes.
220 *
221 * @return a Collection of {@link XClass}.
222 */
223 List getImportedClasses();
224
225 /***
226 * Returns the inner classes.
227 *
228 * @return a Collection of {@link XClass}.
229 */
230 List getInnerClasses();
231
232 /***
233 * Returns all the methods.
234 *
235 * @param superclasses if true, include methods from superclasses and
236 * interfaces too.
237 * @return A collection of XMethod objects
238 */
239 List getMethods( boolean superclasses );
240
241 /***
242 * Returns all the methods that are accepted by the filter.
243 *
244 * @param superclasses if true, include methods from superclasses too.
245 * @param predicate
246 * @return A collection of XMethod objects
247 */
248 List getMethods( Predicate predicate, boolean superclasses );
249
250 /***
251 * Returns all the methods, not including superclasses
252 *
253 * @return A collection of XMethod objects
254 */
255 List getMethods();
256
257 List getFields();
258
259 List getFields( boolean superclasses );
260
261 List getConstructors();
262
263 List getImportedPackages();
264
265 /***
266 * Returns true if the superclass (or recursively superclass of superclass) is
267 * full_qualified_type_name.
268 *
269 * @param full_qualified_type_name Describe what the parameter does
270 * @return Describe the return value
271 */
272 boolean isSubclassOf( String full_qualified_type_name );
273
274 /***
275 * Returns true if the superclass (or recursively superclass of superclass, if
276 * superclasses==true) is full_qualified_type_name.
277 *
278 * @param full_qualified_type_name Describe what the parameter does
279 * @param superclasses Looks in superclasses too if true
280 * @return Describe the return value
281 */
282 boolean isSubclassOf( String full_qualified_type_name, boolean superclasses );
283
284 /***
285 * Returns true if it implements full_qualified_type_name (or recursively
286 * superclasses implement).
287 *
288 * @param full_qualified_type_name Describe what the parameter does
289 * @return Describe the return value
290 */
291 boolean isImplementingInterface( String full_qualified_type_name );
292
293 /***
294 * Returns true if it implements full_qualified_type_name (or recursively
295 * superclasses implement, if superclasses==true).
296 *
297 * @param full_qualified_type_name Describe what the parameter does
298 * @param superclasses Looks in superclasses too if true
299 * @return Describe the return value
300 */
301 boolean isImplementingInterface( String full_qualified_type_name, boolean superclasses );
302
303 /***
304 * Returns true if this instance can be saved.
305 *
306 * @return The Writeable value
307 */
308 boolean isWriteable();
309
310 /***
311 * mark this class dirty for saving
312 */
313 void setDirty();
314
315 /***
316 * whether class needs saving
317 *
318 * @return true if save needed
319 */
320 boolean saveNeeded();
321
322 /***
323 * @return the time that this class was last modified
324 */
325 long lastModified();
326
327 boolean isInterface();
328
329 /***
330 * Returns a collection of tags from the methods in this class (or
331 * superclasses).
332 *
333 * @param superclasses
334 * @param tagName
335 * @return a List of {@link XTag}. If no tags are found, an empty
336 * List is returned.
337 */
338 List getMethodTags( String tagName, boolean superclasses );
339
340 XClass qualify( String unqualifiedClassName );
341 }