You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by ml...@apache.org on 2006/05/26 08:07:15 UTC
svn commit: r409564 - in
/incubator/harmony/enhanced/classlib/trunk/modules/luni/src:
main/java/java/util/ test/java/org/apache/harmony/tests/java/util/
test/resources/serialization/java/util/
Author: mloenko
Date: Thu May 25 23:07:14 2006
New Revision: 409564
URL: http://svn.apache.org/viewvc?rev=409564&view=rev
Log:
fixes and test for HARMONY-505
[classlib][luni] Complete generification of HashMap, etc
Added:
incubator/harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/tests/java/util/HashMapTest.java
incubator/harmony/enhanced/classlib/trunk/modules/luni/src/test/resources/serialization/java/util/HashMapTest.golden.ser (with props)
Modified:
incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/HashMap.java
incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/MapEntry.java
Modified: incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/HashMap.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/HashMap.java?rev=409564&r1=409563&r2=409564&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/HashMap.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/HashMap.java Thu May 25 23:07:14 2006
@@ -30,7 +30,7 @@
transient int elementCount;
- transient Entry[] elementData;
+ transient Entry<K,V>[] elementData;
final float loadFactor;
@@ -51,9 +51,9 @@
}
public Object clone() {
- Entry entry = (Entry) super.clone();
+ Entry<K,V> entry = (Entry<K,V>) super.clone();
if (next != null)
- entry.next = (Entry) next.clone();
+ entry.next = (Entry<K,V>) next.clone();
return entry;
}
@@ -66,22 +66,22 @@
}
}
- static class HashMapIterator implements Iterator {
+ static class HashMapIterator<E,KT,VT> implements Iterator<E> {
private int position = 0;
int expectedModCount;
- final MapEntry.Type type;
+ final MapEntry.Type<E,KT,VT> type;
boolean canRemove = false;
- Entry entry;
+ Entry<KT,VT> entry;
- Entry lastEntry;
+ Entry<KT,VT> lastEntry;
- final HashMap associatedMap;
+ final HashMap<KT,VT> associatedMap;
- HashMapIterator(MapEntry.Type value, HashMap hm) {
+ HashMapIterator(MapEntry.Type<E,KT,VT> value, HashMap<KT,VT> hm) {
associatedMap = hm;
type = value;
expectedModCount = hm.modCount;
@@ -104,12 +104,12 @@
throw new ConcurrentModificationException();
}
- public Object next() {
+ public E next() {
checkConcurrentMod();
if (!hasNext())
throw new NoSuchElementException();
- Entry result;
+ MapEntry<KT,VT> result;
if (entry == null) {
result = lastEntry = associatedMap.elementData[position++];
entry = lastEntry.next;
@@ -142,14 +142,14 @@
}
}
- static class HashMapEntrySet extends AbstractSet {
- private final HashMap associatedMap;
+ static class HashMapEntrySet<KT,VT> extends AbstractSet<Map.Entry<KT,VT>> {
+ private final HashMap<KT,VT> associatedMap;
- public HashMapEntrySet(HashMap hm) {
+ public HashMapEntrySet(HashMap<KT,VT> hm) {
associatedMap = hm;
}
- HashMap hashMap() {
+ HashMap<KT,VT> hashMap() {
return associatedMap;
}
@@ -178,9 +178,9 @@
return false;
}
- public Iterator iterator() {
- return new HashMapIterator(new MapEntry.Type() {
- public Object get(MapEntry entry) {
+ public Iterator<Map.Entry<KT,VT>> iterator() {
+ return new HashMapIterator<Map.Entry<KT,VT>,KT,VT>(new MapEntry.Type<Map.Entry<KT,VT>, KT, VT>() {
+ public Map.Entry<KT,VT> get(MapEntry<KT,VT> entry) {
return entry;
}
}, associatedMap);
@@ -193,8 +193,8 @@
* @param s
* @return Reference to the element array
*/
- Entry[] newElementArray(int s) {
- return new Entry[s];
+ Entry<K,V>[] newElementArray(int s) {
+ return (Entry<K,V>[])new Entry[s];
}
/**
@@ -255,7 +255,7 @@
* @param map
* the mappings to add
*/
- public HashMap(Map map) {
+ public HashMap(Map<? extends K, ? extends V> map) {
this(map.size() < 6 ? 11 : map.size() * 2);
putAll(map);
}
@@ -283,12 +283,12 @@
*/
public Object clone() {
try {
- HashMap map = (HashMap) super.clone();
+ HashMap<K,V> map = (HashMap<K,V>) super.clone();
map.elementData = newElementArray(elementData.length);
- Entry entry;
+ Entry<K,V> entry;
for (int i = 0; i < elementData.length; i++) {
if ((entry = elementData[i]) != null)
- map.elementData[i] = (Entry) entry.clone();
+ map.elementData[i] = (Entry<K,V>) entry.clone();
}
return map;
} catch (CloneNotSupportedException e) {
@@ -337,7 +337,7 @@
public boolean containsValue(Object value) {
if (value != null) {
for (int i = elementData.length; --i >= 0;) {
- Entry entry = elementData[i];
+ Entry<K,V> entry = elementData[i];
while (entry != null) {
if (value.equals(entry.value))
return true;
@@ -346,7 +346,7 @@
}
} else {
for (int i = elementData.length; --i >= 0;) {
- Entry entry = elementData[i];
+ Entry<K,V> entry = elementData[i];
while (entry != null) {
if (entry.value == null)
return true;
@@ -364,8 +364,8 @@
*
* @return a Set of the mappings
*/
- public Set entrySet() {
- return new HashMapEntrySet(this);
+ public Set<Map.Entry<K, V>> entrySet() {
+ return new HashMapEntrySet<K,V>(this);
}
/**
@@ -383,7 +383,7 @@
return null;
}
- Entry getEntry(Object key) {
+ Entry<K,V> getEntry(Object key) {
int index = getModuloHash(key);
return findEntry(key, index);
}
@@ -394,8 +394,8 @@
return (key.hashCode() & 0x7FFFFFFF) % elementData.length;
}
- Entry findEntry(Object key, int index) {
- Entry m;
+ Entry<K,V> findEntry(Object key, int index) {
+ Entry<K,V> m;
m = elementData[index];
if (key != null) {
while (m != null && !keysEqual(key, m)) {
@@ -428,7 +428,7 @@
*/
public Set<K> keySet() {
if (keySet == null) {
- keySet = new AbstractSet() {
+ keySet = new AbstractSet<K>() {
public boolean contains(Object object) {
return containsKey(object);
}
@@ -449,9 +449,9 @@
return false;
}
- public Iterator iterator() {
- return new HashMapIterator(new MapEntry.Type() {
- public Object get(MapEntry entry) {
+ public Iterator<K> iterator() {
+ return new HashMapIterator<K,K,V>(new MapEntry.Type<K,K,V>() {
+ public K get(MapEntry<K,V> entry) {
return entry.key;
}
}, HashMap.this);
@@ -489,8 +489,8 @@
return result;
}
- Entry createEntry(Object key, int index, Object value) {
- Entry entry = new Entry(key, value);
+ Entry<K,V> createEntry(K key, int index, V value) {
+ Entry<K,V> entry = new Entry<K,V>(key, value);
entry.next = elementData[index];
elementData[index] = entry;
return entry;
@@ -502,7 +502,7 @@
* @param map
* the Map to copy mappings from
*/
- public void putAll(Map map) {
+ public void putAll(Map<? extends K, ? extends V> map) {
super.putAll(map);
}
@@ -510,14 +510,14 @@
int length = elementData.length << 1;
if (length == 0)
length = 1;
- Entry[] newData = newElementArray(length);
+ Entry<K,V>[] newData = newElementArray(length);
for (int i = 0; i < elementData.length; i++) {
- Entry entry = elementData[i];
+ Entry<K,V> entry = elementData[i];
while (entry != null) {
Object key = entry.key;
int index = key == null ? 0 : (key.hashCode() & 0x7FFFFFFF)
% length;
- Entry next = entry.next;
+ Entry<K,V> next = entry.next;
entry.next = newData[index];
newData[index] = entry;
entry = next;
@@ -543,10 +543,10 @@
return null;
}
- Entry removeEntry(Object key) {
+ Entry<K,V> removeEntry(Object key) {
int index = 0;
- Entry entry;
- Entry last = null;
+ Entry<K,V> entry;
+ Entry<K,V> last = null;
if (key != null) {
index = (key.hashCode() & 0x7FFFFFFF) % elementData.length;
entry = elementData[index];
@@ -590,7 +590,7 @@
*/
public Collection<V> values() {
if (valuesCollection == null) {
- valuesCollection = new AbstractCollection() {
+ valuesCollection = new AbstractCollection<V>() {
public boolean contains(Object object) {
return containsValue(object);
}
@@ -603,9 +603,9 @@
HashMap.this.clear();
}
- public Iterator iterator() {
- return new HashMapIterator(new MapEntry.Type() {
- public Object get(MapEntry entry) {
+ public Iterator<V> iterator() {
+ return new HashMapIterator<V,K,V>(new MapEntry.Type<V,K,V>() {
+ public V get(MapEntry<K,V> entry) {
return entry.value;
}
}, HashMap.this);
@@ -632,12 +632,12 @@
ClassNotFoundException {
stream.defaultReadObject();
int length = stream.readInt();
- elementData = new Entry[length];
+ elementData = (Entry<K,V>[])new Entry[length];
elementCount = stream.readInt();
for (int i = elementCount; --i >= 0;) {
- Object key = stream.readObject();
+ K key = (K)stream.readObject();
int index = (key.hashCode() & 0x7FFFFFFF) % length;
- createEntry(key, index, stream.readObject());
+ createEntry(key, index, (V)stream.readObject());
}
}
}
Modified: incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/MapEntry.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/MapEntry.java?rev=409564&r1=409563&r2=409564&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/MapEntry.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/MapEntry.java Thu May 25 23:07:14 2006
@@ -24,8 +24,8 @@
K key;
V value;
- interface Type {
- Object get(MapEntry entry);
+ interface Type<RT,KT,VT> {
+ RT get(MapEntry<KT,VT> entry);
}
MapEntry(K theKey) {
Added: incubator/harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/tests/java/util/HashMapTest.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/tests/java/util/HashMapTest.java?rev=409564&view=auto
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/tests/java/util/HashMapTest.java (added)
+++ incubator/harmony/enhanced/classlib/trunk/modules/luni/src/test/java/org/apache/harmony/tests/java/util/HashMapTest.java Thu May 25 23:07:14 2006
@@ -0,0 +1,36 @@
+/* Copyright 2006 The Apache Software Foundation or its licensors, as applicable
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.harmony.tests.java.util;
+
+import java.util.HashMap;
+
+import junit.framework.TestCase;
+import tests.util.SerializationTester;
+
+public class HashMapTest extends TestCase {
+ public void test_serialization() throws Exception {
+ HashMap<String, String> hm = new HashMap<String, String>();
+ hm.put("key", "value");
+ SerializationTester.assertEquals(hm);
+ }
+
+ public void test_serializationCompatability() throws Exception {
+ HashMap<String, String> hm = new HashMap<String, String>();
+ hm.put("key", "value");
+ SerializationTester.assertCompabilityEquals(hm,
+ "serialization/java/util/HashMapTest.golden.ser");
+ }
+}
Added: incubator/harmony/enhanced/classlib/trunk/modules/luni/src/test/resources/serialization/java/util/HashMapTest.golden.ser
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/luni/src/test/resources/serialization/java/util/HashMapTest.golden.ser?rev=409564&view=auto
==============================================================================
Binary file - no diff available.
Propchange: incubator/harmony/enhanced/classlib/trunk/modules/luni/src/test/resources/serialization/java/util/HashMapTest.golden.ser
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream