package jetbrains.mps.internal.collections.runtime; /*Generated by MPS */ import java.util.List; import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.ListIterator; import jetbrains.mps.baseLanguage.closures.runtime.AdapterClass; import jetbrains.mps.baseLanguage.closures.runtime._FunctionTypes; import java.util.Collections; public abstract class AbstractListSequence<T> extends AbstractCollectionSequence<T> implements IListSequence<T>, List<T>, Serializable { private static final long serialVersionUID = -2967185763228867218L; private List<T> list; protected AbstractListSequence(List<T> list) { setList(list); } protected AbstractListSequence(AbstractListSequence<T> other) { setList(new ArrayList<T>(other.getList())); } protected AbstractListSequence() { } @Override public void add(int index, T element) { getList().add(index, element); } @Override public boolean addAll(int index, Collection<? extends T> c) { return getList().addAll(index, c); } @Override public int indexOf(Object o) { return getList().indexOf(o); } @Override public boolean isEmpty() { return getList().isEmpty(); } @Override public T get(int index) { return getList().get(index); } @Override public int lastIndexOf(Object o) { return getList().lastIndexOf(o); } @Override public ListIterator<T> listIterator() { return getList().listIterator(); } @Override public ListIterator<T> listIterator(int index) { return getList().listIterator(index); } @Override public T remove(int index) { return getList().remove(index); } @Override public T set(int index, T element) { return getList().set(index, element); } @Override public List<T> subList(int fromIndex, int toIndex) { return getList().subList(fromIndex, toIndex); } @Override public T first() { if (getList().size() > 0) { return getList().get(0); } if (Sequence.NULL_WHEN_EMPTY) { return null; } else { throw new IndexOutOfBoundsException("Empty list"); } } @Override public T last() { if (getList().size() > 0) { return getList().get(getList().size() - 1); } if (Sequence.NULL_WHEN_EMPTY) { return null; } else { throw new IndexOutOfBoundsException("Empty list"); } } @Override public boolean isNotEmpty() { return !((getList().isEmpty())); } @Override public T removeElementAt(int idx) { if (Sequence.NULL_WHEN_EMPTY) { if (size() == 0 && (idx == 0 || idx == -1)) { return null; } } return remove(idx); } @Override public T removeLastElement() { if (Sequence.NULL_WHEN_EMPTY) { if (size() == 0) { return null; } } return remove(size() - 1); } @Override public T insertElement(int idx, T t) { if (Sequence.IGNORE_NULL_VALUES) { if (t == null) { return null; } } add(idx, t); return t; } @Override public T getElement(int idx) { if (Sequence.NULL_WHEN_EMPTY) { if (size() == 0 && (idx == 0 || idx == -1)) { return null; } } return get(idx); } @Override public T setElement(int idx, T t) { if (Sequence.IGNORE_NULL_VALUES) { if (t == null) { return null; } } if (Sequence.NULL_WHEN_EMPTY) { if (size() == 0 && (idx == 0 || idx == -1)) { return null; } } set(idx, t); return t; } @Override public IListSequence<T> addSequence(ISequence<? extends T> seq) { return (IListSequence<T>) super.addSequence(seq); } @Override public IListSequence<T> removeSequence(ISequence<? extends T> seq) { return (IListSequence<T>) super.removeSequence(seq); } @Override public IListSequence<T> removeWhere(@AdapterClass(value = "IWhereFilter") _FunctionTypes._return_P1_E0<? extends Boolean, ? super T> filter) { return (IListSequence<T>) super.removeWhere(filter); } @SuppressWarnings(value = "unchecked") @Override public T[] toGenericArray() { return (T[]) getList().toArray(); } @SuppressWarnings(value = "unchecked") @Override public T[] toGenericArray(Class<T> runtimeClass) { T[] arr = (T[]) ArrayUtils.newArrayInstance(runtimeClass, getList().size()); return getList().toArray(arr); } @Override public List<T> toList() { return this; } @Override public IListSequence<T> toListSequence() { return this; } /*package*/ void _reverse() { Collections.reverse(getList()); } @Override protected List<T> getCollection() { return list; } protected List<T> getList() { return list; } private void setList(List<T> list) { this.list = list; } }