public static <E> ImmutableList<E> of(
     E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10, E e11, E e12, E... others) {
   final int paramCount = 12;
   Object[] array = new Object[paramCount + others.length];
   arrayCopy(array, 0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12);
   arrayCopy(array, paramCount, others);
   return new RegularImmutableList<E>(ImmutableList.<E>nullCheckedList(array));
 }
 private static <E> ImmutableList<E> copyFromCollection(Collection<? extends E> collection) {
   Object[] elements = collection.toArray();
   switch (elements.length) {
     case 0:
       return of();
     case 1:
       @SuppressWarnings("unchecked") // collection had only Es in it
       ImmutableList<E> list = new SingletonImmutableList<E>((E) elements[0]);
       return list;
     default:
       return new RegularImmutableList<E>(ImmutableList.<E>nullCheckedList(elements));
   }
 }
 public static <E> ImmutableList<E> of(
     E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10, E e11) {
   return new RegularImmutableList<E>(
       ImmutableList.<E>nullCheckedList(e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11));
 }
 public static <E> ImmutableList<E> of(E e1, E e2, E e3, E e4, E e5, E e6) {
   return new RegularImmutableList<E>(ImmutableList.<E>nullCheckedList(e1, e2, e3, e4, e5, e6));
 }
 public static <E> ImmutableList<E> of(E e1, E e2) {
   return new RegularImmutableList<E>(ImmutableList.<E>nullCheckedList(e1, e2));
 }