1 package net.sourceforge.pmd.typeresolution; 2 3 import java.util.Arrays; 4 import java.util.List; 5 6 import net.sourceforge.pmd.ast.SimpleNode; 7 import net.sourceforge.pmd.ast.TypeNode; 8 import net.sourceforge.pmd.symboltable.VariableNameDeclaration; 9 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.getSimpleName().equals(vnd.getTypeImage()) || clazz.getName().equals(vnd.getTypeImage())))); 19 } 20 21 public static boolean subclasses(TypeNode n, Class clazz) { 22 Class type = n.getType(); 23 if (type == null) { 24 return (clazz.getSimpleName().equals(((SimpleNode) n).getImage()) || clazz.getName().equals(((SimpleNode) n).getImage())); 25 } 26 27 if (type.equals(clazz)) { 28 return Boolean.TRUE; 29 } 30 31 List<Class> implementors = Arrays.asList(type.getInterfaces()); 32 if (implementors.contains(clazz)) { 33 return Boolean.TRUE; 34 } 35 Class superC = type.getSuperclass(); 36 while (superC != null && !superC.equals(Object.class)) { 37 if (superC.equals(clazz)) { 38 return Boolean.TRUE; 39 } 40 superC = superC.getSuperclass(); 41 } 42 return Boolean.FALSE; 43 } 44 }