提交 3b916ff3 编写于 作者: M martin

6691215: (coll) IdentityHashMap.containsValue(null) returns true when null value not present

Reviewed-by: dl, chegar, alanb
Contributed-by: scottb@google.com
上级 3d432ee0
...@@ -188,7 +188,6 @@ public class IdentityHashMap<K,V> ...@@ -188,7 +188,6 @@ public class IdentityHashMap<K,V>
/** /**
* Use NULL_KEY for key if it is null. * Use NULL_KEY for key if it is null.
*/ */
private static Object maskNull(Object key) { private static Object maskNull(Object key) {
return (key == null ? NULL_KEY : key); return (key == null ? NULL_KEY : key);
} }
...@@ -378,8 +377,8 @@ public class IdentityHashMap<K,V> ...@@ -378,8 +377,8 @@ public class IdentityHashMap<K,V>
*/ */
public boolean containsValue(Object value) { public boolean containsValue(Object value) {
Object[] tab = table; Object[] tab = table;
for (int i = 1; i < tab.length; i+= 2) for (int i = 1; i < tab.length; i += 2)
if (tab[i] == value) if (tab[i] == value && tab[i - 1] != null)
return true; return true;
return false; return false;
...@@ -905,7 +904,6 @@ public class IdentityHashMap<K,V> ...@@ -905,7 +904,6 @@ public class IdentityHashMap<K,V>
* view the first time this view is requested. The view is stateless, * view the first time this view is requested. The view is stateless,
* so there's no reason to create more than one. * so there's no reason to create more than one.
*/ */
private transient Set<Map.Entry<K,V>> entrySet = null; private transient Set<Map.Entry<K,V>> entrySet = null;
/** /**
......
...@@ -25,7 +25,7 @@ ...@@ -25,7 +25,7 @@
* @test * @test
* @bug 6207984 6272521 6192552 6269713 6197726 6260652 5073546 4137464 * @bug 6207984 6272521 6192552 6269713 6197726 6260652 5073546 4137464
* 4155650 4216399 4294891 6282555 6318622 6355327 6383475 6420753 * 4155650 4216399 4294891 6282555 6318622 6355327 6383475 6420753
* 6431845 4802633 6570566 6570575 6570631 6570924 6691185 * 6431845 4802633 6570566 6570575 6570631 6570924 6691185 6691215
* @summary Run many tests on many Collection and Map implementations * @summary Run many tests on many Collection and Map implementations
* @author Martin Buchholz * @author Martin Buchholz
*/ */
...@@ -247,6 +247,13 @@ public class MOAT { ...@@ -247,6 +247,13 @@ public class MOAT {
testEmptySet(m.keySet()); testEmptySet(m.keySet());
testEmptySet(m.entrySet()); testEmptySet(m.entrySet());
testEmptyCollection(m.values()); testEmptyCollection(m.values());
try { check(! m.containsValue(null)); }
catch (NullPointerException _) { /* OK */ }
try { check(! m.containsKey(null)); }
catch (NullPointerException _) { /* OK */ }
check(! m.containsValue(1));
check(! m.containsKey(1));
} }
private static void testImmutableMap(final Map<Integer,Integer> m) { private static void testImmutableMap(final Map<Integer,Integer> m) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册