Coverage Summary for Class: ImmutableEnumMap (com.google.common.collect)
| Class | Method, % | Line, % |
|---|---|---|
| ImmutableEnumMap | 0% (0/14) | 0% (0/26) |
| ImmutableEnumMap$EnumSerializedForm | 0% (0/2) | 0% (0/3) |
| Total | 0% (0/16) | 0% (0/29) |
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 17 package com.google.common.collect; 18 19 import static com.google.common.base.Preconditions.checkArgument; 20 21 import com.google.common.annotations.GwtCompatible; 22 import com.google.common.collect.ImmutableMap.IteratorBasedImmutableMap; 23 import java.io.Serializable; 24 import java.util.EnumMap; 25 import java.util.Spliterator; 26 import java.util.function.BiConsumer; 27 import org.checkerframework.checker.nullness.qual.Nullable; 28 29 /** 30 * Implementation of {@link ImmutableMap} backed by a non-empty {@link java.util.EnumMap}. 31 * 32 * @author Louis Wasserman 33 */ 34 @GwtCompatible(serializable = true, emulated = true) 35 @SuppressWarnings("serial") // we're overriding default serialization 36 final class ImmutableEnumMap<K extends Enum<K>, V> extends IteratorBasedImmutableMap<K, V> { 37 static <K extends Enum<K>, V> ImmutableMap<K, V> asImmutable(EnumMap<K, V> map) { 38 switch (map.size()) { 39 case 0: 40 return ImmutableMap.of(); 41 case 1: 42 Entry<K, V> entry = Iterables.getOnlyElement(map.entrySet()); 43 return ImmutableMap.of(entry.getKey(), entry.getValue()); 44 default: 45 return new ImmutableEnumMap<>(map); 46 } 47 } 48 49 private final transient EnumMap<K, V> delegate; 50 51 private ImmutableEnumMap(EnumMap<K, V> delegate) { 52 this.delegate = delegate; 53 checkArgument(!delegate.isEmpty()); 54 } 55 56 @Override 57 UnmodifiableIterator<K> keyIterator() { 58 return Iterators.unmodifiableIterator(delegate.keySet().iterator()); 59 } 60 61 @Override 62 Spliterator<K> keySpliterator() { 63 return delegate.keySet().spliterator(); 64 } 65 66 @Override 67 public int size() { 68 return delegate.size(); 69 } 70 71 @Override 72 public boolean containsKey(@Nullable Object key) { 73 return delegate.containsKey(key); 74 } 75 76 @Override 77 public V get(Object key) { 78 return delegate.get(key); 79 } 80 81 @Override 82 public boolean equals(Object object) { 83 if (object == this) { 84 return true; 85 } 86 if (object instanceof ImmutableEnumMap) { 87 object = ((ImmutableEnumMap<?, ?>) object).delegate; 88 } 89 return delegate.equals(object); 90 } 91 92 @Override 93 UnmodifiableIterator<Entry<K, V>> entryIterator() { 94 return Maps.unmodifiableEntryIterator(delegate.entrySet().iterator()); 95 } 96 97 @Override 98 Spliterator<Entry<K, V>> entrySpliterator() { 99 return CollectSpliterators.map(delegate.entrySet().spliterator(), Maps::unmodifiableEntry); 100 } 101 102 @Override 103 public void forEach(BiConsumer<? super K, ? super V> action) { 104 delegate.forEach(action); 105 } 106 107 @Override 108 boolean isPartialView() { 109 return false; 110 } 111 112 // All callers of the constructor are restricted to <K extends Enum<K>>. 113 @Override 114 Object writeReplace() { 115 return new EnumSerializedForm<>(delegate); 116 } 117 118 /* 119 * This class is used to serialize ImmutableEnumMap instances. 120 */ 121 private static class EnumSerializedForm<K extends Enum<K>, V> implements Serializable { 122 final EnumMap<K, V> delegate; 123 124 EnumSerializedForm(EnumMap<K, V> delegate) { 125 this.delegate = delegate; 126 } 127 128 Object readResolve() { 129 return new ImmutableEnumMap<>(delegate); 130 } 131 132 private static final long serialVersionUID = 0; 133 } 134 }