@NotNull @SuppressWarnings("unchecked") public static <D extends CallableDescriptor> Set<D> getAllOverriddenDescriptors(@NotNull D f) { Set<D> result = new LinkedHashSet<D>(); collectAllOverriddenDescriptors((D) f.getOriginal(), result); return result; }
private static <D extends CallableDescriptor> void collectAllOverriddenDescriptors( @NotNull D current, @NotNull Set<D> result) { if (result.contains(current)) return; for (CallableDescriptor callableDescriptor : current.getOriginal().getOverriddenDescriptors()) { @SuppressWarnings("unchecked") D descriptor = (D) callableDescriptor; collectAllOverriddenDescriptors(descriptor, result); result.add(descriptor); } }