@Override public Set<K> keySet() { synchronized (mutex) { if (keySet == null) { keySet = set(delegate().keySet(), mutex); } return keySet; } }
@Override public Set<V> get(K key) { synchronized (mutex) { return set(delegate().get(key), mutex); } }
@Override public Set<Entry<K, V>> entrySet() { synchronized (mutex) { if (entrySet == null) { entrySet = set(delegate().entrySet(), mutex); } return entrySet; } }
@Override public Set<Entry<K, V>> entries() { synchronized (mutex) { if (entrySet == null) { entrySet = set(delegate().entries(), mutex); } return entrySet; } }
@Override public Set<R> rowKeySet() { synchronized (mutex) { return set(delegate().rowKeySet(), mutex); } }
private static <E> Set<E> typePreservingSet(Set<E> set, @Nullable Object mutex) { if (set instanceof SortedSet) { return sortedSet((SortedSet<E>) set, mutex); } else { return set(set, mutex); } }
@Override public Set<V> values() { synchronized (mutex) { if (valueSet == null) { valueSet = set(delegate().values(), mutex); } return valueSet; } }
@Override public Set<Cell<R, C, V>> cellSet() { synchronized (mutex) { return set(delegate().cellSet(), mutex); } }
@Override public Set<C> columnKeySet() { synchronized (mutex) { return set(delegate().columnKeySet(), mutex); } }
@Override public Set<Entry<K, V>> entrySet() { synchronized (mutex) { if (entrySet == null) { entrySet = set(delegate().entrySet(), mutex); } return entrySet; } }
@Override public Set<K> keySet() { synchronized (mutex) { if (keySet == null) { keySet = set(delegate().keySet(), mutex); } return keySet; } }
@Override public Set<V> get(K key) { synchronized (mutex) { return set(delegate().get(key), mutex); } }
@Override protected Set<String> create(String[] elements) { TestSet<String> inner = new TestSet<>(new HashSet<String>(), null); Set<String> outer = Synchronized.set(inner, null); inner.mutex = outer; Collections.addAll(outer, elements); return outer; } })
@Override public Set<V> values() { synchronized (mutex) { if (valueSet == null) { valueSet = set(delegate().values(), mutex); } return valueSet; } }
@Override public Set<R> rowKeySet() { synchronized (mutex) { return set(delegate().rowKeySet(), mutex); } }
private static <E> Set<E> typePreservingSet(Set<E> set, @NullableDecl Object mutex) { if (set instanceof SortedSet) { return sortedSet((SortedSet<E>) set, mutex); } else { return set(set, mutex); } }
@Override public Set<C> columnKeySet() { synchronized (mutex) { return set(delegate().columnKeySet(), mutex); } }
@Override public Set<Entry<K, V>> entries() { synchronized (mutex) { if (entrySet == null) { entrySet = set(delegate().entries(), mutex); } return entrySet; } }
@Override public Set<Cell<R, C, V>> cellSet() { synchronized (mutex) { return set(delegate().cellSet(), mutex); } }
private static <E> Collection<E> typePreservingCollection( Collection<E> collection, @Nullable Object mutex) { if (collection instanceof SortedSet) { return sortedSet((SortedSet<E>) collection, mutex); } if (collection instanceof Set) { return set((Set<E>) collection, mutex); } if (collection instanceof List) { return list((List<E>) collection, mutex); } return collection(collection, mutex); }