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