docs: public static <A extends Annotation> A getAnnotation(Object objectOrClass, Class<A> annotationClass) {
      Class<?> initialClass = objectOrClass instanceof Class<?> ? (Class<?>) objectOrClass : objectOrClass.getClass();
      
      for (Class<?> aClass = initialClass; aClass != null; aClass = aClass.getSuperclass()) {
        A result = aClass.getAnnotation(annotationClass);
        if (result != null) {
          return result;
        }
      }
  
      for (Class<?> anInterface : (List<Class<?>>) ClassUtils.getAllInterfaces(initialClass)) {
        A result = anInterface.getAnnotation(annotationClass);
        if (result != null) {
          return result;
        }
      }
  
      return null;
    }