static final IMethod[] hierarchyDeclaresMethodName( IProgressMonitor pm, ITypeHierarchy hierarchy, IMethod method, String newName) throws CoreException { try { Set<IMethod> result = new HashSet<>(); IType type = method.getDeclaringType(); IMethod foundMethod = Checks.findMethod(newName, method.getParameterTypes().length, false, type); if (foundMethod != null) result.add(foundMethod); IMethod[] foundInHierarchyClasses = classesDeclareMethodName( hierarchy, Arrays.asList(hierarchy.getAllClasses()), method, newName); if (foundInHierarchyClasses != null) result.addAll(Arrays.asList(foundInHierarchyClasses)); IType[] implementingClasses = hierarchy.getImplementingClasses(type); IMethod[] foundInImplementingClasses = classesDeclareMethodName(hierarchy, Arrays.asList(implementingClasses), method, newName); if (foundInImplementingClasses != null) result.addAll(Arrays.asList(foundInImplementingClasses)); return result.toArray(new IMethod[result.size()]); } finally { if (pm != null) { pm.done(); } } }