@NotNull public static List<PsiMethod> getAllMethods(Collection<? extends PsiClass> classes) { List<PsiMethod> allMethods = new ArrayList<PsiMethod>(); HashSet<PsiClass> visited = new HashSet<PsiClass>(); for (PsiClass psiClass : classes) { getAllMethodsInner(psiClass, allMethods, visited); } return allMethods; }
private static void getAllMethodsInner( PsiClass clazz, List<PsiMethod> allMethods, HashSet<PsiClass> visited) { if (visited.contains(clazz)) return; visited.add(clazz); ContainerUtil.addAll(allMethods, clazz.getMethods()); final PsiClass[] supers = clazz.getSupers(); for (PsiClass aSuper : supers) { getAllMethodsInner(aSuper, allMethods, visited); } }