code: static String iterableToStringWithTypeInfo(Iterable<?> itemsIterable) {
      Collection<?> items = iterableToCollection(itemsIterable);
      Optional<String> homogeneousTypeName = getHomogeneousTypeName(items);
  
      if (homogeneousTypeName.isPresent()) {
        return lenientFormat("%s (%s)", items, homogeneousTypeName.get());
      } else {
        return addTypeInfoToEveryItem(items).toString();
      }
    }
docs: Makes a String representation of {@code items} with additional class info.
  
  <p>Example: {@code iterableToStringWithTypeInfo([1, 2]) == "[1, 2] (java.lang.Integer)"} and
  {@code iterableToStringWithTypeInfo([1, 2L]) == "[1 (java.lang.Integer), 2 (java.lang.Long)]"}.