code: private <T> void preFlightCheckFields(final T target) {
  
          ClassStreams.selfAndSupertypes(target.getClass())
                      .map(Class::getDeclaredFields)
                      .flatMap(Arrays::stream)
                      .filter(field -> field.getAnnotation(CliOptionGroup.class) != null)
                      .forEach(field -> {
                          field.setAccessible(true);
                          try {
                              preFlightCheck(field.get(target));
                          } catch (IllegalAccessException e) {
                              throw new RuntimeException(e);
                          }
                      });
      }
docs: Recursively performs the prefligh check on all {@link CliOptionGroup} annotated fields of the target
  including supertypes.
  @param target
  the target on whose fields the preflight check should be performed.
  @param <T>