/** Concrete implementation of {@link WeakValueReference}. */ static final class WeakValueReferenceImpl<K, V, E extends InternalEntry<K, V, E>> extends WeakReference<V> implements WeakValueReference<K, V, E> { @Weak final E entry; WeakValueReferenceImpl(ReferenceQueue<V> queue, V referent, E entry) { super(referent, queue); this.entry = entry; } @Override public E getEntry() { return entry; } @Override public WeakValueReference<K, V, E> copyFor(ReferenceQueue<V> queue, E entry) { return new WeakValueReferenceImpl<>(queue, get(), entry); } }
private static final class EntrySet<K, V> extends ImmutableSet<Entry<K, V>> { @Weak private final transient ImmutableSetMultimap<K, V> multimap; EntrySet(ImmutableSetMultimap<K, V> multimap) { this.multimap = multimap; } @Override public boolean contains(@Nullable Object object) { if (object instanceof Entry) { Entry<?, ?> entry = (Entry<?, ?>) object; return multimap.containsEntry(entry.getKey(), entry.getValue()); } return false; } @Override public int size() { return multimap.size(); } @Override public UnmodifiableIterator<Entry<K, V>> iterator() { return multimap.entryIterator(); } @Override boolean isPartialView() { return false; } }
private static class EntryCollection<K, V> extends ImmutableCollection<Entry<K, V>> { @Weak final ImmutableMultimap<K, V> multimap; EntryCollection(ImmutableMultimap<K, V> multimap) { this.multimap = multimap; } @Override public UnmodifiableIterator<Entry<K, V>> iterator() { return multimap.entryIterator(); } @Override boolean isPartialView() { return multimap.isPartialView(); } @Override public int size() { return multimap.size(); } @Override public boolean contains(Object object) { if (object instanceof Entry) { Entry<?, ?> entry = (Entry<?, ?>) object; return multimap.containsEntry(entry.getKey(), entry.getValue()); } return false; } private static final long serialVersionUID = 0; }
private static final class Values<K, V> extends ImmutableCollection<V> { @Weak private final transient ImmutableMultimap<K, V> multimap;
static final class RegularEntrySet<K, V> extends ImmutableMapEntrySet<K, V> { @Weak private final transient ImmutableMap<K, V> map; private final transient ImmutableList<Entry<K, V>> entries;
/** Concrete implementation of {@link WeakValueReference}. */ static final class WeakValueReferenceImpl<K, V, E extends InternalEntry<K, V, E>> extends WeakReference<V> implements WeakValueReference<K, V, E> { @Weak final E entry; WeakValueReferenceImpl(ReferenceQueue<V> queue, V referent, E entry) { super(referent, queue); this.entry = entry; } @Override public E getEntry() { return entry; } @Override public WeakValueReference<K, V, E> copyFor(ReferenceQueue<V> queue, E entry) { return new WeakValueReferenceImpl<>(queue, get(), entry); } }
@Weak private final SortedMultiset<E> multiset;
static class KeySet<K, V> extends Sets.ImprovedAbstractSet<K> { @Weak final Map<K, V> map;
private class CycleDetectingReentrantWriteLock extends ReentrantReadWriteLock.WriteLock { @Weak final CycleDetectingReentrantReadWriteLock readWriteLock;
/** Concrete implementation of {@link WeakValueReference}. */ static final class WeakValueReferenceImpl<K, V, E extends InternalEntry<K, V, E>> extends WeakReference<V> implements WeakValueReference<K, V, E> { @Weak final E entry; WeakValueReferenceImpl(ReferenceQueue<V> queue, V referent, E entry) { super(referent, queue); this.entry = entry; } @Override public E getEntry() { return entry; } @Override public WeakValueReference<K, V, E> copyFor(ReferenceQueue<V> queue, E entry) { return new WeakValueReferenceImpl<>(queue, get(), entry); } }
private class CycleDetectingReentrantReadLock extends ReentrantReadWriteLock.ReadLock { @Weak final CycleDetectingReentrantReadWriteLock readWriteLock;
private static class EntryCollection<K, V> extends ImmutableCollection<Entry<K, V>> { @Weak final ImmutableMultimap<K, V> multimap; EntryCollection(ImmutableMultimap<K, V> multimap) { this.multimap = multimap; } @Override public UnmodifiableIterator<Entry<K, V>> iterator() { return multimap.entryIterator(); } @Override boolean isPartialView() { return multimap.isPartialView(); } @Override public int size() { return multimap.size(); } @Override public boolean contains(Object object) { if (object instanceof Entry) { Entry<?, ?> entry = (Entry<?, ?>) object; return multimap.containsEntry(entry.getKey(), entry.getValue()); } return false; } private static final long serialVersionUID = 0; }
@Weak private final Multimap<K, V> multimap;
@GwtCompatible(emulated = true) private static final class Values<K, V> extends ImmutableList<V> { @Weak final RegularImmutableMap<K, V> map;
@GwtCompatible(emulated = true) private static final class KeySet<K, V> extends IndexedImmutableSet<K> { @Weak private final RegularImmutableMap<K, V> map;
@Weak private final FilteredMultimap<K, V> multimap;
@Weak private final ImmutableMap<K, V> map;
public abstract static class Guard { @Weak final Monitor monitor; final Condition condition;
abstract class AbstractCacheSet<T> extends AbstractSet<T> { @Weak final ConcurrentMap<?, ?> map; AbstractCacheSet(ConcurrentMap<?, ?> map) { this.map = map; } @Override public int size() { return map.size(); } @Override public boolean isEmpty() { return map.isEmpty(); } @Override public void clear() { map.clear(); } // super.toArray() may misbehave if size() is inaccurate, at least on old versions of Android. // https://code.google.com/p/android/issues/detail?id=36519 / http://r.android.com/47508 @Override public Object[] toArray() { return toArrayList(this).toArray(); } @Override public <E> E[] toArray(E[] a) { return toArrayList(this).toArray(a); } }
abstract class AbstractCacheSet<T> extends AbstractSet<T> { @Weak final ConcurrentMap<?, ?> map; AbstractCacheSet(ConcurrentMap<?, ?> map) { this.map = map; } @Override public int size() { return map.size(); } @Override public boolean isEmpty() { return map.isEmpty(); } @Override public void clear() { map.clear(); } // super.toArray() may misbehave if size() is inaccurate, at least on old versions of Android. // https://code.google.com/p/android/issues/detail?id=36519 / http://r.android.com/47508 @Override public Object[] toArray() { return toArrayList(this).toArray(); } @Override public <E> E[] toArray(E[] a) { return toArrayList(this).toArray(a); } }