summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSean McDirmid <sean.mcdirmid@gmail.com>2007-01-30 14:35:11 +0000
committerSean McDirmid <sean.mcdirmid@gmail.com>2007-01-30 14:35:11 +0000
commit2f4c6a2eb8405eaa6d54a8d29f33f4595da7d1c7 (patch)
treea68e734ff15db18af59e2e27e300a3a873b1f19a /src
parentcf5d275c67b5984411655d7e0987a3f8c184c2f2 (diff)
downloadscala-2f4c6a2eb8405eaa6d54a8d29f33f4595da7d1c7.tar.gz
scala-2f4c6a2eb8405eaa6d54a8d29f33f4595da7d1c7.tar.bz2
scala-2f4c6a2eb8405eaa6d54a8d29f33f4595da7d1c7.zip
Fixed various problems in JCL.
Diffstat (limited to 'src')
-rw-r--r--src/library/scala/collection/jcl/ArrayList.scala2
-rw-r--r--src/library/scala/collection/jcl/Buffer.scala6
-rw-r--r--src/library/scala/collection/jcl/CollectionWrapper.scala6
-rw-r--r--src/library/scala/collection/jcl/ConcreteMapWrapper.scala26
-rw-r--r--src/library/scala/collection/jcl/ConcreteWrapper.scala28
-rw-r--r--src/library/scala/collection/jcl/HashMap.scala2
-rw-r--r--src/library/scala/collection/jcl/HashSet.scala2
-rw-r--r--src/library/scala/collection/jcl/IdentityHashMap.scala2
-rw-r--r--src/library/scala/collection/jcl/IterableWrapper.scala2
-rw-r--r--src/library/scala/collection/jcl/LinkedHashMap.scala2
-rw-r--r--src/library/scala/collection/jcl/LinkedHashSet.scala2
-rw-r--r--src/library/scala/collection/jcl/LinkedList.scala2
-rw-r--r--src/library/scala/collection/jcl/Map.scala1
-rw-r--r--src/library/scala/collection/jcl/MapWrapper.scala11
-rw-r--r--src/library/scala/collection/jcl/Ranged.scala62
-rw-r--r--src/library/scala/collection/jcl/SetWrapper.scala4
-rw-r--r--src/library/scala/collection/jcl/Sorted.scala52
-rw-r--r--src/library/scala/collection/jcl/SortedMapWrapper.scala2
-rw-r--r--src/library/scala/collection/jcl/SortedSet.scala1
-rw-r--r--src/library/scala/collection/jcl/TreeMap.scala2
-rw-r--r--src/library/scala/collection/jcl/TreeSet.scala2
-rw-r--r--src/library/scala/collection/jcl/WeakHashMap.scala2
22 files changed, 114 insertions, 107 deletions
diff --git a/src/library/scala/collection/jcl/ArrayList.scala b/src/library/scala/collection/jcl/ArrayList.scala
index abb7378732..d6ca5ee42c 100644
--- a/src/library/scala/collection/jcl/ArrayList.scala
+++ b/src/library/scala/collection/jcl/ArrayList.scala
@@ -14,7 +14,7 @@ package scala.collection.jcl;
*
* @author Sean McDirmid
*/
-class ArrayList[A](override val underlying : java.util.ArrayList) extends ConcreteWrapper[A] with BufferWrapper[A] {
+class ArrayList[A](override val underlying : java.util.ArrayList) extends CollectionWrapper[A] with BufferWrapper[A] {
def this() = this(new java.util.ArrayList);
override def elements = super[BufferWrapper].elements;
}
diff --git a/src/library/scala/collection/jcl/Buffer.scala b/src/library/scala/collection/jcl/Buffer.scala
index 69c59bd447..db22270f97 100644
--- a/src/library/scala/collection/jcl/Buffer.scala
+++ b/src/library/scala/collection/jcl/Buffer.scala
@@ -14,20 +14,16 @@ package scala.collection.jcl;
*
* @author Sean McDirmid
*/
-trait Buffer[A] extends MutableSeq[A] with Collection[A] with Sorted[Int,A] {
+trait Buffer[A] extends MutableSeq[A] with Collection[A] with Ranged[Int,A] {
final protected type SortedSelf = Buffer[A];
override def elements : BufferIterator[Int,A];
-
/** The first index of a buffer is 0. */
override def first = 0;
-
/** The last index of a buffer is its size - 1. */
override def last = size - 1;
-
/** Indices are compared through subtraction. */
final def compare(k0 : Int, k1 : Int) = k0 - k1;
-
/** Removes the element at index "idx" */
def remove(idx : Int) = {
val i = elements;
diff --git a/src/library/scala/collection/jcl/CollectionWrapper.scala b/src/library/scala/collection/jcl/CollectionWrapper.scala
index 4b70eaa887..279e3f8a07 100644
--- a/src/library/scala/collection/jcl/CollectionWrapper.scala
+++ b/src/library/scala/collection/jcl/CollectionWrapper.scala
@@ -32,4 +32,10 @@ trait CollectionWrapper[A] extends Collection[A] with IterableWrapper[A] {
case that : CollectionWrapper[_] => underlying.addAll(that.underlying);
case _ => super.addAll(that);
}
+ override def toString = underlying.toString;
+ override def hashCode = underlying.hashCode;
+ override def equals(that : Any) = that match {
+ case that: CollectionWrapper[_] => underlying == that.underlying;
+ case _ => super.equals(that);
+ }
}
diff --git a/src/library/scala/collection/jcl/ConcreteMapWrapper.scala b/src/library/scala/collection/jcl/ConcreteMapWrapper.scala
deleted file mode 100644
index 6b622fdeec..0000000000
--- a/src/library/scala/collection/jcl/ConcreteMapWrapper.scala
+++ /dev/null
@@ -1,26 +0,0 @@
-/* __ *\
-** ________ ___ / / ___ Scala API **
-** / __/ __// _ | / / / _ | (c) 2006-2007, LAMP/EPFL **
-** __\ \/ /__/ __ |/ /__/ __ | **
-** /____/\___/_/ |_/____/_/ | | **
-** |/ **
-\* */
-
-// $Id$
-
-package scala.collection.jcl;
-
-/** A concrete wrapper around a Java map. The identity of the wraper is
- * fixed to the identity of the underlying map.
- *
- * @author Sean McDirmid
- */
-abstract class ConcreteMapWrapper[K,E] extends MapWrapper[K,E] {
- val underlying: java.util.Map;
- override def toString = underlying.toString;
- override def hashCode = underlying.hashCode;
- override def equals(that : Any) = that match {
- case that: ConcreteMapWrapper[_,_] => underlying == that.underlying;
- case _ => false;
- }
-}
diff --git a/src/library/scala/collection/jcl/ConcreteWrapper.scala b/src/library/scala/collection/jcl/ConcreteWrapper.scala
deleted file mode 100644
index d24cbb1951..0000000000
--- a/src/library/scala/collection/jcl/ConcreteWrapper.scala
+++ /dev/null
@@ -1,28 +0,0 @@
-/* __ *\
-** ________ ___ / / ___ Scala API **
-** / __/ __// _ | / / / _ | (c) 2006-2007, LAMP/EPFL **
-** __\ \/ /__/ __ |/ /__/ __ | **
-** /____/\___/_/ |_/____/_/ | | **
-** |/ **
-\* */
-
-// $Id$
-
-package scala.collection.jcl;
-
-/** Describes wrappers around concrete underlying collections. The identity
- * of the wrapper is related strictly to the Java collection being wrapped,
- * which is structurally determined.
- *
- * @author Sean McDirmid
- */
-abstract class ConcreteWrapper[A] extends CollectionWrapper[A] {
- val underlying: java.util.Collection;
- override def elements : MutableIterator[A] = super.elements;
- override def toString = underlying.toString;
- override def hashCode = underlying.hashCode;
- override def equals(that : Any) = that match {
- case that: ConcreteWrapper[_] => underlying == that.underlying;
- case _ => false;
- }
-}
diff --git a/src/library/scala/collection/jcl/HashMap.scala b/src/library/scala/collection/jcl/HashMap.scala
index 31281c1694..559255b070 100644
--- a/src/library/scala/collection/jcl/HashMap.scala
+++ b/src/library/scala/collection/jcl/HashMap.scala
@@ -14,6 +14,6 @@ package scala.collection.jcl;
*
* @author Sean McDirmid
*/
-class HashMap[K,E](override val underlying: java.util.HashMap) extends ConcreteMapWrapper[K,E] {
+class HashMap[K,E](override val underlying: java.util.HashMap) extends MapWrapper[K,E] {
def this() = this(new java.util.HashMap);
}
diff --git a/src/library/scala/collection/jcl/HashSet.scala b/src/library/scala/collection/jcl/HashSet.scala
index 255415e5cd..900b7008ac 100644
--- a/src/library/scala/collection/jcl/HashSet.scala
+++ b/src/library/scala/collection/jcl/HashSet.scala
@@ -14,7 +14,7 @@ package scala.collection.jcl;
*
* @author Sean McDirmid
*/
-class HashSet[A](override val underlying: java.util.HashSet) extends ConcreteWrapper[A] with SetWrapper[A] {
+class HashSet[A](override val underlying: java.util.HashSet) extends CollectionWrapper[A] with SetWrapper[A] {
/** Creates an underlying Java hash set. */
def this() = this(new java.util.HashSet);
}
diff --git a/src/library/scala/collection/jcl/IdentityHashMap.scala b/src/library/scala/collection/jcl/IdentityHashMap.scala
index 5df2363009..a56a49c844 100644
--- a/src/library/scala/collection/jcl/IdentityHashMap.scala
+++ b/src/library/scala/collection/jcl/IdentityHashMap.scala
@@ -17,6 +17,6 @@ package scala.collection.jcl;
*
* @author Sean McDirmid
*/
-class IdentityHashMap[K,E](override val underlying : java.util.IdentityHashMap) extends ConcreteMapWrapper[K,E] {
+class IdentityHashMap[K,E](override val underlying : java.util.IdentityHashMap) extends MapWrapper[K,E] {
def this() = this(new java.util.IdentityHashMap);
}
diff --git a/src/library/scala/collection/jcl/IterableWrapper.scala b/src/library/scala/collection/jcl/IterableWrapper.scala
index 5070325454..b904342af6 100644
--- a/src/library/scala/collection/jcl/IterableWrapper.scala
+++ b/src/library/scala/collection/jcl/IterableWrapper.scala
@@ -27,7 +27,7 @@ trait IterableWrapper[A] extends MutableIterable[A] {
}
override def size = underlying.size;
override def isEmpty = underlying.isEmpty;
- override def clear() = underlying.clear;
+ override def clear = underlying.clear;
override def elements : MutableIterator[A] = new IteratorWrapper(underlying.iterator);
class IteratorWrapper(underlying : java.util.Iterator) extends MutableIterator[A] {
// val underlying = IterableWrapper.this.underlying.iterator;
diff --git a/src/library/scala/collection/jcl/LinkedHashMap.scala b/src/library/scala/collection/jcl/LinkedHashMap.scala
index f0d16584af..b86b171fb8 100644
--- a/src/library/scala/collection/jcl/LinkedHashMap.scala
+++ b/src/library/scala/collection/jcl/LinkedHashMap.scala
@@ -15,6 +15,6 @@ package scala.collection.jcl;
*
* @author Sean McDirmid
*/
-class LinkedHashMap[K,E](override val underlying: java.util.LinkedHashMap) extends ConcreteMapWrapper[K,E] {
+class LinkedHashMap[K,E](override val underlying: java.util.LinkedHashMap) extends MapWrapper[K,E] {
def this() = this(new java.util.LinkedHashMap);
}
diff --git a/src/library/scala/collection/jcl/LinkedHashSet.scala b/src/library/scala/collection/jcl/LinkedHashSet.scala
index 463f2d3ca3..3bd26a8b5b 100644
--- a/src/library/scala/collection/jcl/LinkedHashSet.scala
+++ b/src/library/scala/collection/jcl/LinkedHashSet.scala
@@ -15,6 +15,6 @@ package scala.collection.jcl;
*
* @author Sean McDirmid
*/
-class LinkedHashSet[A](override val underlying: java.util.LinkedHashSet) extends ConcreteWrapper[A] with SetWrapper[A] {
+class LinkedHashSet[A](override val underlying: java.util.LinkedHashSet) extends CollectionWrapper[A] with SetWrapper[A] {
def this() = this(new java.util.LinkedHashSet);
}
diff --git a/src/library/scala/collection/jcl/LinkedList.scala b/src/library/scala/collection/jcl/LinkedList.scala
index 75684fd020..b744e72f79 100644
--- a/src/library/scala/collection/jcl/LinkedList.scala
+++ b/src/library/scala/collection/jcl/LinkedList.scala
@@ -16,7 +16,7 @@ package scala.collection.jcl;
*
* @author Sean McDirmid
*/
-class LinkedList[A](override val underlying : java.util.LinkedList) extends ConcreteWrapper[A] with BufferWrapper[A] {
+class LinkedList[A](override val underlying : java.util.LinkedList) extends CollectionWrapper[A] with BufferWrapper[A] {
def this() = this(new java.util.LinkedList);
override def elements = super[BufferWrapper].elements;
override def add(idx : Int, a : A) =
diff --git a/src/library/scala/collection/jcl/Map.scala b/src/library/scala/collection/jcl/Map.scala
index 46b9fc463e..1546831d23 100644
--- a/src/library/scala/collection/jcl/Map.scala
+++ b/src/library/scala/collection/jcl/Map.scala
@@ -18,6 +18,7 @@ trait Map[K,E] extends MutableIterable[Tuple2[K,E]] with scala.collection.mutabl
override def clear() = super[MutableIterable].clear;
override def isEmpty = super[MutableIterable].isEmpty;
override def keySet : Set[K] = new KeySet;
+ override final def keys = keySet.elements;
/** The values of this map as a projection, which means
removals from the returned collection will remove the element from this map.
@returns a projection of this map's elements. */
diff --git a/src/library/scala/collection/jcl/MapWrapper.scala b/src/library/scala/collection/jcl/MapWrapper.scala
index 06ffff75f7..80b219c95c 100644
--- a/src/library/scala/collection/jcl/MapWrapper.scala
+++ b/src/library/scala/collection/jcl/MapWrapper.scala
@@ -24,6 +24,11 @@ trait MapWrapper[K,E] extends jcl.Map[K,E] {
val ret = underlying.put(key,elem);
if (ret == null) None else Some(ret.asInstanceOf[E]);
}
+ override def get(key : K) : Option[E] = {
+ val ret = underlying.get(key);
+ if (ret == null) None else Some(ret.asInstanceOf[E]);
+ }
+
override def putAll(that : Iterable[Tuple2[K,E]]) : Unit = that match {
case that : MapWrapper[_,_] => underlying.putAll(that.underlying);
case _ => super.putAll(that);
@@ -52,4 +57,10 @@ trait MapWrapper[K,E] extends jcl.Map[K,E] {
val underlying = MapWrapper.this.underlying.values;
override def has(e : E) = MapWrapper.this.underlying.containsValue(e);
}
+ override def toString = underlying.toString;
+ override def hashCode = underlying.hashCode;
+ override def equals(that : Any) = that match {
+ case that: MapWrapper[_,_] => underlying == that.underlying;
+ case _ => super.equals(that);
+ }
}
diff --git a/src/library/scala/collection/jcl/Ranged.scala b/src/library/scala/collection/jcl/Ranged.scala
new file mode 100644
index 0000000000..51c5aba6a4
--- /dev/null
+++ b/src/library/scala/collection/jcl/Ranged.scala
@@ -0,0 +1,62 @@
+/* __ *\
+** ________ ___ / / ___ Scala API **
+** / __/ __// _ | / / / _ | (c) 2006-2007, LAMP/EPFL **
+** __\ \/ /__/ __ |/ /__/ __ | **
+** /____/\___/_/ |_/____/_/ | | **
+** |/ **
+\* */
+
+// $Id: Sorted.scala 9621 2007-01-17 14:29:25Z michelou $
+
+package scala.collection.jcl;
+
+/** Any collection (including maps) whose keys (or elements) are ordered.
+ *
+ * @author Sean McDirmid
+ */
+trait Ranged[K,A] extends MutableIterable[A] {
+ protected type SortedSelf <: Ranged[K,A];
+
+ /** Returns the first key of the collection. */
+ def first: K;
+
+ /** Returns the last key of the collection. */
+ def last: K;
+
+ /** Comparison function that orders keys. */
+ def compare(k0: K, k1: K): Int;
+
+ /** Creates a ranged projection of this collection. Any mutations in the
+ * ranged projection will update this collection and vice versa. Note: keys
+ * are not garuanteed to be consistent between this collection and the projection.
+ * This is the case for buffers where indexing is relative to the projection.
+ *
+ * @param from The lower-bound (inclusive) of the ranged projection.
+ * <code>None</code> if there is no lower bound.
+ * @param until The upper-bound (exclusive) of the ranged projection.
+ * <code>None</code> if there is no upper bound.
+ */
+ def rangeImpl(from: Option[K], until: Option[K]) : SortedSelf;
+ /** Creates a ranged projection of this collection with no upper-bound.
+ ** @param from The lower-bound (inclusive) of the ranged projection.
+ **/
+ final def from(from: K): SortedSelf = rangeImpl(Some(from), None);
+ /** Creates a ranged projection of this collection with no lower-bound.
+ ** @param until The upper-bound (exclusive) of the ranged projection.
+ **/
+ final def until(until: K): SortedSelf = rangeImpl(None, Some(until));
+
+ /** Creates a ranged projection of this collection with both a lower-bound and an upper-bound.
+ ** @param from The upper-bound (exclusive) of the ranged projection.
+ **/
+ final def range(from: K, until: K) : SortedSelf = rangeImpl(Some(from),Some(until));
+
+ /** A wrapper around Java comparators. */
+ protected class Comparator[K <% Ordered[K]] extends java.util.Comparator {
+ def compare(x0 : Any, x1 : Any) = {
+ val k0 = x0.asInstanceOf[K];
+ val k1 = x1.asInstanceOf[K];
+ k0.compare(k1);
+ }
+ }
+}
diff --git a/src/library/scala/collection/jcl/SetWrapper.scala b/src/library/scala/collection/jcl/SetWrapper.scala
index 26e3c20fb2..18f7e342b2 100644
--- a/src/library/scala/collection/jcl/SetWrapper.scala
+++ b/src/library/scala/collection/jcl/SetWrapper.scala
@@ -16,6 +16,6 @@ package scala.collection.jcl;
*/
trait SetWrapper[A] extends CollectionWrapper[A] with Set[A] {
protected def underlying: java.util.Set;
- override def isEmpty = super[Set].isEmpty;
- override def clear() = super.clear()
+ override def isEmpty = super[CollectionWrapper].isEmpty;
+ override def clear() = super[CollectionWrapper].clear;
}
diff --git a/src/library/scala/collection/jcl/Sorted.scala b/src/library/scala/collection/jcl/Sorted.scala
index 62e2e0dcb5..c9ff2b3990 100644
--- a/src/library/scala/collection/jcl/Sorted.scala
+++ b/src/library/scala/collection/jcl/Sorted.scala
@@ -14,49 +14,33 @@ package scala.collection.jcl;
*
* @author Sean McDirmid
*/
-trait Sorted[K,A] extends MutableIterable[A] {
- protected type SortedSelf <: Sorted[K,A];
-
- /** Returns the first key of the collection. */
- def first: K;
-
- /** Returns the last key of the collection. */
- def last: K;
-
- /** Comparison function that orders keys. */
- def compare(k0: K, k1: K): Int;
+trait Sorted[K,A] extends Ranged[K,A] {
+ override protected type SortedSelf <: Sorted[K,A];
+ /** return as a projection the set of keys in this collection */
+ def keySet : SortedSet[K];
/** Creates a ranged projection of this collection. Any mutations in the
- * ranged projection will update this collection and vice versa.
+ * ranged projection will update this collection and vice versa. Keys
+ * are garuanteed to be consistent between the collection and its projection.
*
* @param from The lower-bound (inclusive) of the ranged projection.
* <code>None</code> if there is no lower bound.
* @param until The upper-bound (exclusive) of the ranged projection.
* <code>None</code> if there is no upper bound.
*/
- def rangeImpl(from: Option[K], until: Option[K]) : SortedSelf;
-
- /** Creates a ranged projection of this collection with no upper-bound.
- ** @param from The lower-bound (inclusive) of the ranged projection.
- **/
- final def from(from: K): SortedSelf = rangeImpl(Some(from), None);
-
- /** Creates a ranged projection of this collection with no lower-bound.
- ** @param from The upper-bound (exclusive) of the ranged projection.
- **/
- final def until(until: K): SortedSelf = rangeImpl(None, Some(until));
+ override def rangeImpl(from: Option[K], until: Option[K]) : SortedSelf;
- /** Creates a ranged projection of this collection with both a lower-bound and an upper-bound.
- ** @param from The upper-bound (exclusive) of the ranged projection.
+ /** Create a range projection of this collection with no lower-bound.
+ ** @param to The upper-bound (inclusive) of the ranged projection.
**/
- final def range(from: K, until: K) : SortedSelf = rangeImpl(Some(from),Some(until));
-
- /** A wrapper around Java comparators. */
- protected class Comparator[K <% Ordered[K]] extends java.util.Comparator {
- def compare(x0 : Any, x1 : Any) = {
- val k0 = x0.asInstanceOf[K];
- val k1 = x1.asInstanceOf[K];
- k0.compare(k1);
- }
+ final def to(to : K): SortedSelf = {
+ // tough!
+ val i = keySet.from(to).elements;
+ if (!i.hasNext) return this.asInstanceOf[SortedSelf];
+ val next = i.next;
+ if (next == to) {
+ if (!i.hasNext) return this.asInstanceOf[SortedSelf];
+ else return until(i.next);
+ } else return until(next);
}
}
diff --git a/src/library/scala/collection/jcl/SortedMapWrapper.scala b/src/library/scala/collection/jcl/SortedMapWrapper.scala
index a4deaad5cd..62af69cfb0 100644
--- a/src/library/scala/collection/jcl/SortedMapWrapper.scala
+++ b/src/library/scala/collection/jcl/SortedMapWrapper.scala
@@ -14,7 +14,7 @@ package scala.collection.jcl;
*
* @author Sean McDirmid
*/
-trait SortedMapWrapper[K,E] extends MapWrapper[K,E] with SortedMap[K,E] {
+trait SortedMapWrapper[K,E] extends SortedMap[K,E] with MapWrapper[K,E] {
protected override def underlying : java.util.SortedMap;
/** the comparator function of this sorted map is defined in terms
* of the underlying sorted map's comparator.
diff --git a/src/library/scala/collection/jcl/SortedSet.scala b/src/library/scala/collection/jcl/SortedSet.scala
index 80fc56a813..729c778106 100644
--- a/src/library/scala/collection/jcl/SortedSet.scala
+++ b/src/library/scala/collection/jcl/SortedSet.scala
@@ -16,6 +16,7 @@ package scala.collection.jcl;
*/
trait SortedSet[A] extends jcl.Set[A] with Sorted[A,A] {
final protected type SortedSelf = SortedSet[A];
+ override def keySet = this;
def compare(a0 : A, a1 : A) : Int;
def first : A = {
val i = elements;
diff --git a/src/library/scala/collection/jcl/TreeMap.scala b/src/library/scala/collection/jcl/TreeMap.scala
index 6b8d1ef9bc..403ee6c5cf 100644
--- a/src/library/scala/collection/jcl/TreeMap.scala
+++ b/src/library/scala/collection/jcl/TreeMap.scala
@@ -14,6 +14,6 @@ package scala.collection.jcl;
*
* @author Sean McDirmid
*/
-class TreeMap[K <% Ordered[K],E] extends ConcreteMapWrapper[K,E] with SortedMapWrapper[K,E] {
+class TreeMap[K <% Ordered[K],E] extends SortedMapWrapper[K,E] {
val underlying = (new java.util.TreeMap(new Comparator[K]));
}
diff --git a/src/library/scala/collection/jcl/TreeSet.scala b/src/library/scala/collection/jcl/TreeSet.scala
index 4374b11077..4ce84fa79e 100644
--- a/src/library/scala/collection/jcl/TreeSet.scala
+++ b/src/library/scala/collection/jcl/TreeSet.scala
@@ -15,6 +15,6 @@ package scala.collection.jcl;
*
* @author Sean McDirmid
*/
-class TreeSet[A <% Ordered[A]] extends ConcreteWrapper[A] with SortedSetWrapper[A] {
+class TreeSet[A <% Ordered[A]] extends CollectionWrapper[A] with SortedSetWrapper[A] {
val underlying = new java.util.TreeSet(new Comparator[A]);
}
diff --git a/src/library/scala/collection/jcl/WeakHashMap.scala b/src/library/scala/collection/jcl/WeakHashMap.scala
index 15494acaa8..c2d6239a80 100644
--- a/src/library/scala/collection/jcl/WeakHashMap.scala
+++ b/src/library/scala/collection/jcl/WeakHashMap.scala
@@ -24,6 +24,6 @@ package scala.collection.jcl;
*
* @author Sean McDirmid
*/
-class WeakHashMap[K,E](override val underlying: java.util.WeakHashMap) extends ConcreteMapWrapper[K,E] {
+class WeakHashMap[K,E](override val underlying: java.util.WeakHashMap) extends MapWrapper[K,E] {
def this() = this(new java.util.WeakHashMap);
}