1 19 20 package org.netbeans.modules.refactoring.java.plugins; 21 22 import com.sun.source.tree.*; 23 import java.util.List ; 24 import javax.lang.model.element.*; 25 import javax.lang.model.type.TypeMirror; 26 import javax.lang.model.util.Types; 27 import org.netbeans.api.java.source.WorkingCopy; 28 29 33 public class FindSubtypesVisitor extends SearchVisitor { 34 35 private boolean recursive; 36 public FindSubtypesVisitor(boolean recursive, WorkingCopy workingCopy) { 37 super(workingCopy); 38 this.recursive = recursive; 39 } 40 41 @Override 42 public Tree visitClass(ClassTree node, Element elementToFind) { 43 if (workingCopy.getTreeUtilities().isSynthetic(getCurrentPath())) { 44 return super.visitClass(node, elementToFind); 45 } 46 if (recursive) { 47 if (isSubtype(getCurrentPath(), elementToFind)) { 48 addUsage(getCurrentPath()); 49 } 50 } else { 51 TypeElement el = (TypeElement) workingCopy.getTrees().getElement(getCurrentPath()); 52 Types types = workingCopy.getTypes(); 53 if (types.isSameType(types.erasure(el.getSuperclass()), types.erasure(elementToFind.asType())) || containsType(el.getInterfaces(), elementToFind.asType())) { 54 addUsage(getCurrentPath()); 55 } 56 } 57 return super.visitClass(node, elementToFind); 58 } 59 60 private boolean containsType(List <? extends TypeMirror> list, TypeMirror t) { 61 Types types = workingCopy.getTypes(); 62 t = types.erasure(t); 63 for (TypeMirror m:list) { 64 if (types.isSameType(t, types.erasure(m))) { 65 return true; 66 }; 67 } 68 return false; 69 } 70 71 } 72 | Popular Tags |