docs: private String genericTypeAsString(GenericsType genericsType) {
          StringBuilder ret = new StringBuilder(genericsType.getName());
          if (genericsType.getUpperBounds() != null) {
              ret.append(" extends ");
              for (int i = 0; i < genericsType.getUpperBounds().length; i++) {
                  ClassNode classNode = genericsType.getUpperBounds()[i];
                  if (classNode.equals(this)) {
                      ret.append(classNode.getName());
                  } else {
                      ret.append(classNode.toString(false));
                  }
                  if (i + 1 < genericsType.getUpperBounds().length) ret.append(" & ");
              }
          } else if (genericsType.getLowerBound() !=null) {
              ClassNode classNode = genericsType.getLowerBound();
              if (classNode.equals(this)) {
                  ret.append(" super ").append(classNode.getName());
              } else {
                  ret.append(" super ").append(classNode);
              }
          }
          return ret.toString();
      }