package restx.common;
import com.google.common.collect.Sets;
import java.util.Set;
/**
* Provides static utility methods to deal with {@link Class}
*
* @author apeyrard
*/
public class MoreClasses {
private MoreClasses() {}
/**
* Gets all inherited classes for a specified class (in a flat structure). Its super classes, and its interfaces.
*
* This process is recursive, if class A inherit from B which also inherit from C and D, the result will
* be (B, C, D).
*
* @param clazz the clazz to analyse
* @return the list of inherited classes
*/
public static Set<Class> getInheritedClasses(Class clazz) {
Set<Class> inheritedClasses = Sets.newHashSet();
// add super class, and add recursively their inherited classes
Class superClass = clazz.getSuperclass();
if (superClass != null) {
inheritedClasses.add(superClass);
inheritedClasses.addAll(getInheritedClasses(superClass));
}
// add all interfaces, and recursively add their inherited classes
Class[] interfaces = clazz.getInterfaces();
for (Class anInterface : interfaces) {
inheritedClasses.add(anInterface);
inheritedClasses.addAll(getInheritedClasses(anInterface));
}
return inheritedClasses;
}
}