docs: private static List<Type> removeRedundantBounds(final Type[] bounds) {
          if (bounds.length == 1) {
              return Collections.singletonList(bounds[0]);
          }
          // if TypeVariable S has a bound T that is a TypeVariable, than S cannot have any other bounds, i.e. bounds.lenght == 1
  
          List<Type> result = new LinkedList<Type>();
          for (int i = 0; i < bounds.length; i++) {
              boolean isRedundant = false;
              for (int j = 0; j < bounds.length && i != j; j++) {
                  if (Reflections.getRawType(bounds[i]).isAssignableFrom(Reflections.getRawType(bounds[j]))) {
                      isRedundant = true;
                      break;
                  }
              }
              if (!isRedundant) {
                  result.add(bounds[i]);
              }
          }
  
          return result;
      }