@Override
    public boolean addAll(int index, Collection<? extends E> coll) {
        checkIndexAdd(index);

    	if (coll instanceof List) {
    		return doAddAll(index, new IReadOnlyListFromList<E>((List<? extends E>) coll));
    	} else {
    		return doAddAll(index, new IReadOnlyListFromCollection<E>(coll));
    	}
    }
Inserts all of the elements in the specified collection into this
list, starting at the specified position.
Shifts the element currently at that position (if any) and any
subsequent elements to the right (increases their indices).
The new elements will appear in the list in the order that they
are returned by the specified collection's iterator.

@param index index at which to insert the first element from the
             specified collection
@param coll collection containing elements to be inserted into this list
@return <tt>true</tt> if this list changed as a result of the call
@throws IndexOutOfBoundsException if the index is invalid
@throws NullPointerException if the specified collection is null
jphp-runtime/src/php/runtime/memory/support/IList.java