01: package net.sourceforge.pmd.typeresolution;
02:
03: import java.util.Arrays;
04: import java.util.List;
05:
06: import net.sourceforge.pmd.ast.SimpleNode;
07: import net.sourceforge.pmd.ast.TypeNode;
08: import net.sourceforge.pmd.symboltable.VariableNameDeclaration;
09:
10: public class TypeHelper {
11:
12: public static boolean isA(TypeNode n, Class clazz) {
13: return subclasses(n, clazz);
14: }
15:
16: public static boolean isA(VariableNameDeclaration vnd, Class clazz) {
17: Class type = vnd.getType();
18: return ((type != null && type.equals(clazz)) || (type == null && (clazz
19: .getSimpleName().equals(vnd.getTypeImage()) || clazz
20: .getName().equals(vnd.getTypeImage()))));
21: }
22:
23: public static boolean subclasses(TypeNode n, Class clazz) {
24: Class type = n.getType();
25: if (type == null) {
26: return (clazz.getSimpleName().equals(
27: ((SimpleNode) n).getImage()) || clazz.getName()
28: .equals(((SimpleNode) n).getImage()));
29: }
30:
31: if (type.equals(clazz)) {
32: return Boolean.TRUE;
33: }
34:
35: List<Class> implementors = Arrays.asList(type.getInterfaces());
36: if (implementors.contains(clazz)) {
37: return Boolean.TRUE;
38: }
39: Class super C = type.getSuperclass();
40: while (super C != null && !super C.equals(Object.class)) {
41: if (superC.equals(clazz)) {
42: return Boolean.TRUE;
43: }
44: superC = superC.getSuperclass();
45: }
46: return Boolean.FALSE;
47: }
48: }
|