// get all annotations from base classes and implemented interfaces
Class<?> superClass = annotatedClass;
while ((superClass = superClass.getSuperclass()) != null)
// get super class annotations
result.addAll(ArrayUtils.toList(superClass.getDeclaredAnnotations()));
// now get all the superinterfaces' annotations
for (val iface : annotatedClass.getInterfaces())
result.addAll(ArrayUtils.toList(iface.getDeclaredAnnotations()));
}