Yes, looks good to me too. Cheers, Rémi
----- Reply message ----- From: "Chris Hegarty" <chris.hega...@oracle.com> To: "Alan Bateman" <alan.bate...@oracle.com> Cc: <core-libs-dev@openjdk.java.net> Subject: [PATCH] 7164256 : EnumMap.clone doesn't clear the entrySet field, keeping a reference to the original Map Date: Wed, Jun 6, 2012 14:35 On 06/06/2012 13:28, Alan Bateman wrote: > > This looks good to me and I'm happy to sponsor this. Does anyone else > want to review this? The changes look fine to me too. -Chris. > > -Alan > > > On 29/05/2012 03:37, Diego Belfer wrote: >> : >> >> # HG changeset patch >> # User muralx >> # Date 1338257674 10800 >> # Node ID f61b94fd7aca738353177fcf3cc3972ddf36cf36 >> # Parent 9b8c96f96a0f9a5801b55530a387fefbe50482a3 >> PATCH 7164256 : EnumMap.clone does not clear the instance field entrySet >> >> diff --git a/src/share/classes/java/util/EnumMap.java >> b/src/share/classes/java/util/EnumMap.java >> --- a/src/share/classes/java/util/EnumMap.java >> +++ b/src/share/classes/java/util/EnumMap.java >> @@ -721,6 +721,7 @@ >> throw new AssertionError(); >> } >> result.vals = result.vals.clone(); >> + result.entrySet = null; >> return result; >> } >> >> diff --git a/test/java/util/EnumMap/ProperEntrySetOnClone.java >> b/test/java/util/EnumMap/ProperEntrySetOnClone.java >> new file mode 100644 >> --- /dev/null >> +++ b/test/java/util/EnumMap/ProperEntrySetOnClone.java >> @@ -0,0 +1,58 @@ >> +/* >> + * Copyright (c) 2012, Oracle and/or its affiliates. All rights >> reserved. >> + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. >> + * >> + * This code is free software; you can redistribute it and/or modify it >> + * under the terms of the GNU General Public License version 2 only, as >> + * published by the Free Software Foundation. >> + * >> + * This code is distributed in the hope that it will be useful, but >> WITHOUT >> + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or >> + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License >> + * version 2 for more details (a copy is included in the LICENSE file >> that >> + * accompanied this code). >> + * >> + * You should have received a copy of the GNU General Public License >> version >> + * 2 along with this work; if not, write to the Free Software >> Foundation, >> + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. >> + * >> + * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA >> 94065 USA >> + * or visit www.oracle.com <http://www.oracle.com> if you need >> additional information or have any >> + * questions. >> + */ >> + >> +/* >> + * @test >> + * @bug 7164256 >> + * @summary EnumMap.entrySet() returns an entrySet referencing to the >> cloned instance >> + * @author Diego Belfer >> + */ >> + >> +import java.util.EnumMap; >> + >> +public class ProperEntrySetOnClone { >> + public enum Test { >> + ONE, TWO >> + } >> + >> + public static void main(String[] args) { >> + EnumMap<Test, String> map1 = new EnumMap<Test, String>(Test.class); >> + map1.put(Test.ONE, "1"); >> + map1.put(Test.TWO, "2"); >> + >> + // We need to force creation of the map1.entrySet >> + int size = map1.entrySet().size(); >> + if (size != 2) { >> + throw new RuntimeException( >> + "Invalid size in original map. Expected: 2 was: " + size); >> + } >> + >> + EnumMap<Test, String> map2 = map1.clone(); >> + map2.remove(Test.ONE); >> + size = map2.entrySet().size(); >> + if (size != 1) { >> + throw new RuntimeException( >> + "Invalid size in cloned instance. Expected: 1 was: " + size); >> + } >> + } >> +} >> >