Make ReadWriteTrieMap extend ForwardingMap 60/60560/4
authorRobert Varga <robert.varga@pantheon.tech>
Wed, 19 Jul 2017 11:58:20 +0000 (13:58 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Thu, 20 Jul 2017 09:19:43 +0000 (11:19 +0200)
ForwardingMap gives us some of the implementation details we are
duplicating here. Hence subclass ForwardingMap and remove those
duplications.

Change-Id: I5cb6b839f19f2247fb7fdc78f46127739f484898
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
common/util/src/main/java/org/opendaylight/yangtools/util/ReadWriteTrieMap.java

index bf8c06a33b0d0e5b3a5358247d09564676306205..788c2d9b66834c961b6e4d1f3ef49c5ae0c35bcf 100644 (file)
@@ -8,6 +8,7 @@
 package org.opendaylight.yangtools.util;
 
 import com.google.common.base.Preconditions;
+import com.google.common.collect.ForwardingMap;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Map;
@@ -23,15 +24,17 @@ import org.slf4j.LoggerFactory;
  * their size, and determining the size of a TrieMap is expensive, we make sure
  * to update it as we go.
  *
- * <p>FIXME: this map does not support modification view the keySet()/values()/entrySet()
- *        methods.
+ * <p>
+ * FIXME: this map does not support modification view the keySet()/values()/entrySet() methods.
  *
  * @param <K> Key type
  * @param <V> Value type
  */
-final class ReadWriteTrieMap<K, V> implements Map<K, V> {
+final class ReadWriteTrieMap<K, V> extends ForwardingMap<K, V> {
     private static final Logger LOG = LoggerFactory.getLogger(ReadOnlyTrieMap.class);
+
     private final MutableTrieMap<K, V> delegate;
+
     private int size;
 
     ReadWriteTrieMap() {
@@ -44,6 +47,11 @@ final class ReadWriteTrieMap<K, V> implements Map<K, V> {
         this.size = size;
     }
 
+    @Override
+    protected Map<K, V> delegate() {
+        return delegate;
+    }
+
     Map<K, V> toReadOnly() {
         final Map<K, V> ret = new ReadOnlyTrieMap<>(delegate, size);
         LOG.trace("Converted read-write TrieMap {} to read-only {}", this, ret);
@@ -60,21 +68,6 @@ final class ReadWriteTrieMap<K, V> implements Map<K, V> {
         return size == 0;
     }
 
-    @Override
-    public boolean containsKey(final Object key) {
-        return delegate.containsKey(key);
-    }
-
-    @Override
-    public boolean containsValue(final Object value) {
-        return delegate.containsValue(value);
-    }
-
-    @Override
-    public V get(final Object key) {
-        return delegate.get(key);
-    }
-
     @Override
     public V put(final K key, final V value) {
         final V ret = delegate.put(key, value);
@@ -121,19 +114,4 @@ final class ReadWriteTrieMap<K, V> implements Map<K, V> {
     public Set<Entry<K, V>> entrySet() {
         return Collections.unmodifiableSet(delegate.entrySet());
     }
-
-    @Override
-    public boolean equals(final Object obj) {
-        return delegate.equals(obj);
-    }
-
-    @Override
-    public int hashCode() {
-        return delegate.hashCode();
-    }
-
-    @Override
-    public String toString() {
-        return delegate.toString();
-    }
 }