code: public static List<Class<?>> getAllAnnotatedLineageClasses(Class<?> bottomClass,
              Class<? extends Annotation> annotation) {
          if (!bottomClass.isAnnotationPresent(annotation)) {
              return Collections.emptyList();
          }
          List<Class<?>> lineageClassList = new ArrayList<>();
          lineageClassList.add(bottomClass);
          Class<?> superclass = bottomClass.getSuperclass();
          lineageClassList.addAll(getAllAnnotatedLineageClasses(superclass, annotation));
          for (Class<?> superInterface : bottomClass.getInterfaces()) {
              lineageClassList.addAll(getAllAnnotatedLineageClasses(superInterface, annotation));
          }
          return lineageClassList;
      }
docs: ************************************************************************