8221924: get(null) on single-entry unmodifiable Map returns null instead of throwing NPE

Reviewed-by: redestad, lancea
This commit is contained in:
Stuart Marks 2019-04-09 09:49:36 -07:00
parent b0c2b42e40
commit 1aa784cdac
2 changed files with 12 additions and 2 deletions

View file

@ -881,6 +881,11 @@ class ImmutableCollections {
return Set.of(new KeyValueHolder<>(k0, v0)); return Set.of(new KeyValueHolder<>(k0, v0));
} }
@Override
public V get(Object o) {
return o.equals(k0) ? v0 : null; // implicit nullcheck of o
}
@Override @Override
public boolean containsKey(Object o) { public boolean containsKey(Object o) {
return o.equals(k0); // implicit nullcheck of o return o.equals(k0); // implicit nullcheck of o

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2015, 2017, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@ -50,7 +50,7 @@ import static org.testng.Assert.fail;
/* /*
* @test * @test
* @bug 8048330 * @bug 8048330 8221924
* @summary Test convenience static factory methods on Map. * @summary Test convenience static factory methods on Map.
* @run testng MapFactories * @run testng MapFactories
*/ */
@ -386,6 +386,11 @@ public class MapFactories {
act.containsKey(null); act.containsKey(null);
} }
@Test(dataProvider="all", expectedExceptions=NullPointerException.class)
public void getNullShouldThrowNPE(Map<Integer,String> act, Map<Integer,String> exp) {
act.get(null);
}
@Test(dataProvider="all") @Test(dataProvider="all")
public void serialEquality(Map<Integer, String> act, Map<Integer, String> exp) { public void serialEquality(Map<Integer, String> act, Map<Integer, String> exp) {
// assume that act.equals(exp) tested elsewhere // assume that act.equals(exp) tested elsewhere