code: private static String getBoundedSourceName(String token, Type[] bounds, String direction)
        throws NoSourceNameException {
      List<String> boundNames = new ArrayList<String>();
      for (Type boundary : bounds) {
        boundNames.add(getSourceName(boundary));
      }
      return String.format("%s %s %s", token, direction, join(" & ", boundNames));
    }
docs: Creates a bounded source name of the form {@code T extends Foo & Bar},
  {@code ? super Baz} or {@code ?} as appropriate.