docs: static AnnotationInfoList getIndirectAnnotations(final AnnotationInfoList directAnnotationInfo,
              final ClassInfo annotatedClass) {
          // Add direct annotations
          final Set<ClassInfo> directOrInheritedAnnotationClasses = new HashSet<>();
          final Set<ClassInfo> reachedAnnotationClasses = new HashSet<>();
          final AnnotationInfoList reachableAnnotationInfo = new AnnotationInfoList(
                  directAnnotationInfo == null ? 2 : directAnnotationInfo.size());
          if (directAnnotationInfo != null) {
              for (final AnnotationInfo dai : directAnnotationInfo) {
                  directOrInheritedAnnotationClasses.add(dai.getClassInfo());
                  reachableAnnotationInfo.add(dai);
                  findMetaAnnotations(dai, reachableAnnotationInfo, reachedAnnotationClasses);
              }
          }
          if (annotatedClass != null) {
              // Add any @Inherited annotations on superclasses
              for (final ClassInfo superclass : annotatedClass.getSuperclasses()) {
                  if (superclass.annotationInfo != null) {
                      for (final AnnotationInfo sai : superclass.annotationInfo) {
                          // Don't add inherited superclass annotation if it is overridden in a subclass 
                          if (sai.isInherited() && directOrInheritedAnnotationClasses.add(sai.getClassInfo())) {
                              reachableAnnotationInfo.add(sai);
                              final AnnotationInfoList reachableMetaAnnotationInfo = new AnnotationInfoList(2);
                              findMetaAnnotations(sai, reachableMetaAnnotationInfo, reachedAnnotationClasses);
                              // Meta-annotations also have to have @Inherited to be inherited
                              for (final AnnotationInfo rmai : reachableMetaAnnotationInfo) {
                                  if (rmai.isInherited()) {
                                      reachableAnnotationInfo.add(rmai);
                                  }
                              }
                          }
                      }
                  }
              }
          }
          // Return sorted annotation list
          final AnnotationInfoList directAnnotationInfoSorted = directAnnotationInfo == null
                  ? AnnotationInfoList.EMPTY_LIST
                  : new AnnotationInfoList(directAnnotationInfo);
          CollectionUtils.sortIfNotEmpty(directAnnotationInfoSorted);
          final AnnotationInfoList annotationInfoList = new AnnotationInfoList(reachableAnnotationInfo,
                  directAnnotationInfoSorted);
          CollectionUtils.sortIfNotEmpty(annotationInfoList);
          return annotationInfoList;
      }