code: public <E extends T> ImmutableList<E> immutableSortedCopy(
        Iterable<E> elements) {
      @SuppressWarnings("unchecked") // we'll only ever have E's in here
      E[] array = (E[]) Iterables.toArray(elements);
      for (E e : array) {
        checkNotNull(e);
      }
      Arrays.sort(array, this);
      return ImmutableList.asImmutableList(array);
    }
docs: Returns an <b>immutable</b> list containing {@code elements} sorted by this
  ordering. The input is not modified.
  
  <p>Unlike {@link Sets#newTreeSet(Iterable)}, this method does not discard
  elements that are duplicates according to the comparator. The sort
  performed is <i>stable</i>, meaning that such elements will appear in the
  returned list in the same order they appeared in {@code elements}.
  
  <p><b>Performance note:</b> According to our
  benchmarking
  on Open JDK 7, this method is the most efficient way to make a sorted copy
  of a collection.
  
  @throws NullPointerException if any of {@code elements} (or {@code
  elements} itself) is null
  @since 3.0