code: public static <E, L extends List<E>> UnmodifiableMutableList<E> of(L list)
      {
          if (list == null)
          {
              throw new IllegalArgumentException("cannot create an UnmodifiableMutableList for null");
          }
          if (list instanceof RandomAccess)
          {
              return new RandomAccessUnmodifiableMutableList<E>(RandomAccessListAdapter.adapt(list));
          }
          return new UnmodifiableMutableList<E>(ListAdapter.adapt(list));
      }
docs: This method will take a MutableList and wrap it directly in a UnmodifiableMutableList.  It will
  take any other non-GS-list and first adapt it will a ListAdapter, and then return a
  UnmodifiableMutableList that wraps the adapter.