| 694 | } |
| 695 | |
| 696 | static class SynchronizedMap<K, V> implements Map<K, V>, Serializable { |
| 697 | private static final long serialVersionUID = 1978198479659022715L; |
| 698 | |
| 699 | private final Map<K, V> m; |
| 700 | |
| 701 | final Object mutex; |
| 702 | |
| 703 | SynchronizedMap(Map<K, V> map) { |
| 704 | m = map; |
| 705 | mutex = this; |
| 706 | } |
| 707 | |
| 708 | SynchronizedMap(Map<K, V> map, Object mutex) { |
| 709 | m = map; |
| 710 | this.mutex = mutex; |
| 711 | } |
| 712 | |
| 713 | public void clear() { |
| 714 | synchronized (mutex) { |
| 715 | m.clear(); |
| 716 | } |
| 717 | } |
| 718 | |
| 719 | public boolean containsKey(Object key) { |
| 720 | synchronized (mutex) { |
| 721 | return m.containsKey(key); |
| 722 | } |
| 723 | } |
| 724 | |
| 725 | public boolean containsValue(Object value) { |
| 726 | synchronized (mutex) { |
| 727 | return m.containsValue(value); |
| 728 | } |
| 729 | } |
| 730 | |
| 731 | public Set<Map.Entry<K, V>> entrySet() { |
| 732 | synchronized (mutex) { |
| 733 | return new SynchronizedSet<Map.Entry<K, V>>(m.entrySet(), mutex); |
| 734 | } |
| 735 | } |
| 736 | |
| 737 | @Override |
| 738 | public boolean equals(Object object) { |
| 739 | synchronized (mutex) { |
| 740 | return m.equals(object); |
| 741 | } |
| 742 | } |
| 743 | |
| 744 | public V get(Object key) { |
| 745 | synchronized (mutex) { |
| 746 | return m.get(key); |
| 747 | } |
| 748 | } |
| 749 | |
| 750 | @Override |
| 751 | public int hashCode() { |
| 752 | synchronized (mutex) { |
| 753 | return m.hashCode(); |
nothing calls this directly
no outgoing calls
no test coverage detected