code: public List<ExpandedAnnotation> expand(final Annotation targetAnno) {
          Objects.requireNonNull(targetAnno);
          
          final List<ExpandedAnnotation> expandedList = new ArrayList<>();
          
          if(isRepeated(targetAnno)) {
              // 繰り返しのアノテーションの場合、要素を抽出する。
              try {
                  final Method method = targetAnno.getClass().getMethod("value");
                  final Annotation[] annos = (Annotation[]) method.invoke(targetAnno);
                  
                  int index = 0;
                  for(Annotation anno : annos) {
                      final List<ExpandedAnnotation> repeatedAnnos = expand(anno);
                      for(ExpandedAnnotation repeatedAnno : repeatedAnnos) {
                          repeatedAnno.setIndex(index);
                      }
                      
                      expandedList.addAll(repeatedAnnos);
                      index++;
                  }
                  
              } catch (Exception e) {
                  throw new RuntimeException("fail get repeated value attribute.", e);
              }
              
          } else if(isComposed(targetAnno)) {
              final ExpandedAnnotation composedAnno = new ExpandedAnnotation(targetAnno, true);
              
              // 合成のアノテーションの場合、メタアノテーションを子供としてさらに抽出する。
              final List<Annotation> childAnnos = Arrays.asList(targetAnno.annotationType().getAnnotations());
              for(Annotation anno : childAnnos) {
                  
                  final List<ExpandedAnnotation> nestedAnnos = expand(anno).stream()
                          .map(nestedAnno -> overrideAttribute(targetAnno, nestedAnno))
                          .collect(Collectors.toList());
                  
                  composedAnno.addChilds(nestedAnnos);
                  
              }
              
              Collections.sort(composedAnno.getChilds(), comparator);
              expandedList.add(composedAnno);
              
          } else {
              // 通常のアノテーションの場合
              expandedList.add(new ExpandedAnnotation(targetAnno, false));
              
          }
          
          Collections.sort(expandedList, comparator);
          return expandedList;
          
      }
docs: アノテーションを展開する。
  @param targetAnno 展開対象のアノテーション
  @return 展開されたアノテーション
  @throws NullPointerException {@literal targetAnno == null.}