/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * This file is part of SableCC. * * See the file "LICENSE" for copyright information and the * * terms and conditions for copying, distribution and * * modification of SableCC. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ package org.sablecc.sablecc; import java.util.Collection; import java.util.LinkedList; import java.util.ListIterator; @SuppressWarnings({"rawtypes", "unchecked"}) public class TypedLinkedList extends LinkedList { Cast cast; public TypedLinkedList() { super(); cast = NoCast.instance; } public TypedLinkedList(Collection c) { super(c); cast = NoCast.instance; } public TypedLinkedList(Cast cast) { super(); this.cast = cast; } public TypedLinkedList(Collection c, Cast cast) { super(c); this.cast = cast; } public Cast getCast() { return cast; } @Override public void addFirst(Object o) { super.addFirst(cast.cast(o)); } @Override public void addLast(Object o) { super.addLast(cast.cast(o)); } @Override public ListIterator listIterator(int index) { return new TypedLinkedListIterator(super.listIterator(index)); } private class TypedLinkedListIterator implements ListIterator { ListIterator iterator; TypedLinkedListIterator(ListIterator iterator) { this.iterator = iterator; } @Override public boolean hasNext() { return iterator.hasNext(); } @Override public Object next() { return iterator.next(); } @Override public boolean hasPrevious() { return iterator.hasPrevious(); } @Override public Object previous() { return iterator.previous(); } @Override public int nextIndex() { return iterator.nextIndex(); } @Override public int previousIndex() { return iterator.previousIndex(); } @Override public void remove () { iterator.remove(); } @Override public void set (Object o) { iterator.set(cast.cast(o)); } @Override public void add (Object o) { iterator.add(cast.cast(o)); } } }