1/* 2 * Copyright (C) 2012 The Guava Authors 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.google.common.collect; 18 19import com.google.common.annotations.GwtCompatible; 20import com.google.common.annotations.GwtIncompatible; 21 22/** 23 * An {@link ImmutableAsList} implementation specialized for when the delegate collection is 24 * already backed by an {@code ImmutableList} or array. 25 * 26 * @author Louis Wasserman 27 */ 28@GwtCompatible(emulated = true) 29@SuppressWarnings("serial") // uses writeReplace, not default serialization 30class RegularImmutableAsList<E> extends ImmutableAsList<E> { 31 private final ImmutableCollection<E> delegate; 32 private final ImmutableList<? extends E> delegateList; 33 34 RegularImmutableAsList(ImmutableCollection<E> delegate, ImmutableList<? extends E> delegateList) { 35 this.delegate = delegate; 36 this.delegateList = delegateList; 37 } 38 39 RegularImmutableAsList(ImmutableCollection<E> delegate, Object[] array) { 40 this(delegate, ImmutableList.<E>asImmutableList(array)); 41 } 42 43 @Override 44 ImmutableCollection<E> delegateCollection() { 45 return delegate; 46 } 47 48 ImmutableList<? extends E> delegateList() { 49 return delegateList; 50 } 51 52 @SuppressWarnings("unchecked") // safe covariant cast! 53 @Override 54 public UnmodifiableListIterator<E> listIterator(int index) { 55 return (UnmodifiableListIterator<E>) delegateList.listIterator(index); 56 } 57 58 @GwtIncompatible("not present in emulated superclass") 59 @Override 60 int copyIntoArray(Object[] dst, int offset) { 61 return delegateList.copyIntoArray(dst, offset); 62 } 63 64 @Override 65 public E get(int index) { 66 return delegateList.get(index); 67 } 68} 69