package jetbrains.mps.internal.collections.runtime; /*Generated by MPS */ import java.util.List; import java.io.Serializable; import java.util.Collections; import jetbrains.mps.internal.collections.runtime.impl.NullListSequence; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; public class ListSequence<T> extends AbstractListSequence<T> implements IListSequence<T>, List<T>, Serializable { private static final long serialVersionUID = 7823717404349215342L; private List<T> list; protected ListSequence(List<T> list) { super(list); } protected ListSequence(ListSequence<T> other) { super(other); } @Override public IListSequence<T> reversedList() { ListSequence<T> reversed = new ListSequence<T>(this); reversed._reverse(); return reversed; } @Override public IListSequence<T> subListSequence(int fromIdx, int upToIdx) { return new ListSequence<T>(getList().subList(fromIdx, upToIdx)); } @Override public IListSequence<T> headListSequence(int upToIdx) { return new ListSequence<T>(getList().subList(0, upToIdx)); } @Override public IListSequence<T> tailListSequence(int fromIdx) { return new ListSequence<T>(getList().subList(fromIdx, getList().size())); } @Override public IListSequence<T> asUnmodifiable() { return new ListSequence<T>(Collections.unmodifiableList(getList())); } @Override public IListSequence<T> asSynchronized() { return new ListSequence<T>(CollectionUtils.synchronizedList(getList())); } public static <U> IListSequence<U> fromArray(U... array) { if (Sequence.USE_NULL_SEQUENCE) { if (array == null) { return NullListSequence.instance(); } } return ListSequence.fromListAndArray(new ArrayList<U>(), array); } public static <U> IListSequence<U> fromList(List<U> list) { if (Sequence.USE_NULL_SEQUENCE) { if (list == null) { return NullListSequence.instance(); } } if (list instanceof IListSequence<?>) { return (IListSequence<U>) list; } return new ListSequence<U>(list); } public static <U> IListSequence<U> fromListAndArray(List<U> list, U... array) { if (Sequence.NULL_ARRAY_IS_SINGLETON) { if (array == null) { array = (U[]) Sequence.nullSingletonArray(); } } if (Sequence.USE_NULL_SEQUENCE) { if (list == null && array == null) { return NullListSequence.instance(); } else if (list == null) { list = new ArrayList<U>(); } else if (array == null) { if (list instanceof IListSequence<?>) { return (IListSequence<U>) list; } return new ListSequence<U>(list); } } List<U> input = Arrays.asList(array); if (Sequence.IGNORE_NULL_VALUES) { for (U u : input) { if (u != null) { list.add(u); } } } else { list.addAll(input); } if (list instanceof IListSequence<?>) { return (IListSequence<U>) list; } return new ListSequence<U>(list); } public static <U> IListSequence<U> fromIterable(Iterable<U> it) { if (Sequence.USE_NULL_SEQUENCE) { if (it == null) { return NullListSequence.instance(); } } if (it instanceof IListSequence<?>) { return (IListSequence<U>) it; } List<U> list = new ArrayList<U>(); if (Sequence.IGNORE_NULL_VALUES) { for (U u : it) { if (u != null) { list.add(u); } } } else if (it instanceof Collection<?>) { list.addAll((Collection<? extends U>) it); } else { for (U u : it) { list.add(u); } } return new ListSequence<U>(list); } public static <U> IListSequence<U> fromListWithValues(List<U> list, Iterable<? extends U> it) { List<U> tmp = list; if (Sequence.USE_NULL_SEQUENCE) { if (list == null && it == null) { return NullListSequence.instance(); } else if (list == null) { tmp = new ArrayList<U>(); } else if (it == null) { return ListSequence.fromList(list); } } if (Sequence.IGNORE_NULL_VALUES) { for (U u : it) { if (u != null) { tmp.add(u); } } } else if (it instanceof Collection<?>) { tmp.addAll((Collection<? extends U>) it); } else { for (U u : it) { tmp.add(u); } } if (tmp instanceof IListSequence<?>) { return (IListSequence<U>) tmp; } return new ListSequence<U>(tmp); } }