| 308 | } |
| 309 | |
| 310 | private static final class SingletonMap<K, V> extends AbstractMap<K, V> |
| 311 | implements Serializable { |
| 312 | private static final long serialVersionUID = -6979724477215052911L; |
| 313 | |
| 314 | final K k; |
| 315 | |
| 316 | final V v; |
| 317 | |
| 318 | SingletonMap(K key, V value) { |
| 319 | k = key; |
| 320 | v = value; |
| 321 | } |
| 322 | |
| 323 | @Override |
| 324 | public boolean containsKey(Object key) { |
| 325 | return k == null ? key == null : k.equals(key); |
| 326 | } |
| 327 | |
| 328 | @Override |
| 329 | public boolean containsValue(Object value) { |
| 330 | return v == null ? value == null : v.equals(value); |
| 331 | } |
| 332 | |
| 333 | @Override |
| 334 | public V get(Object key) { |
| 335 | if (containsKey(key)) { |
| 336 | return v; |
| 337 | } |
| 338 | return null; |
| 339 | } |
| 340 | |
| 341 | @Override |
| 342 | public int size() { |
| 343 | return 1; |
| 344 | } |
| 345 | |
| 346 | @Override |
| 347 | public Set<Map.Entry<K, V>> entrySet() { |
| 348 | return new AbstractSet<Map.Entry<K, V>>() { |
| 349 | @Override |
| 350 | public boolean contains(Object object) { |
| 351 | if (object instanceof Map.Entry) { |
| 352 | Map.Entry<?, ?> entry = (Map.Entry<?, ?>) object; |
| 353 | return containsKey(entry.getKey()) |
| 354 | && containsValue(entry.getValue()); |
| 355 | } |
| 356 | return false; |
| 357 | } |
| 358 | |
| 359 | @Override |
| 360 | public int size() { |
| 361 | return 1; |
| 362 | } |
| 363 | |
| 364 | @Override |
| 365 | public Iterator<Map.Entry<K, V>> iterator() { |
| 366 | return new Iterator<Map.Entry<K, V>>() { |
| 367 | boolean hasNext = true; |
nothing calls this directly
no outgoing calls
no test coverage detected