package java.util.concurrent; import java.util.Map; import org.checkerframework.dataflow.qual.Pure; import org.checkerframework.dataflow.qual.SideEffectFree; import java.util.*; import org.checkerframework.checker.nullness.qual.KeyFor; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; public interface ConcurrentMap<K extends @NonNull Object, V extends @NonNull Object> extends Map<K, V> { @Pure public boolean isEmpty(); @Pure public int size(); @Pure public @Nullable V get(@NonNull Object key); @Pure public boolean containsKey(@NonNull Object key); @Pure public boolean containsValue(@NonNull Object value); @Pure public boolean contains(@NonNull Object value); public @Nullable V put(K key, V value); public @Nullable V putIfAbsent(K key, V value); public void putAll(Map<? extends K, ? extends V> m); public @Nullable V remove(Object key); public boolean remove(@NonNull Object key, @NonNull Object value); public boolean replace(K key, V oldValue, V newValue); public @Nullable V replace(K key, V value); public void clear(); @SideEffectFree public Set<@KeyFor("this") K> keySet(); @SideEffectFree public Collection<V> values(); @SideEffectFree public Set<Map.Entry<@KeyFor("this") K, V>> entrySet(); @SideEffectFree public Enumeration<K> keys(); @SideEffectFree public Enumeration<V> elements(); @SideEffectFree public Object clone(); }