[PATCH] 8245694 : java.util.Properties.entrySet() does not override java.lang.Object methods
Lisa Li
liyu.italy at gmail.com
Sun Jul 19 10:48:48 UTC 2020
Hi Julia,
Apologies for the delay. Please review the updated fix for JDK-8245694
<https://bugs.openjdk.java.net/browse/JDK-8245694>. Also, my name is on
the contributor list as: Yu Li - OpenJDK - yuli.
*BUG DESCRIPTION*:
JDK-8245694 <https://bugs.openjdk.java.net/browse/JDK-8245694> :
java.util.Properties.entrySet()
does not override java.lang.Object methods since java 9.
*PATCH*:
# HG changeset patch
# User yuli
# Date 1595152648 -28800
# Sun Jul 19 17:57:28 2020 +0800
# Node ID 4f359fdb3df3407cf8b31cb9ad153a99c52165c8
# Parent 72bf0aca309e326f35cdc85cbdeb3076e4d4e74d
8245694: java.util.Properties.entrySet() does not override Object methods
Summary: Add missing override methods
Contributed-by: Yu Li <liyu.italy at gmail.com>
diff -r 72bf0aca309e -r 4f359fdb3df3
src/java.base/share/classes/java/util/Properties.java
--- a/src/java.base/share/classes/java/util/Properties.java Fri Jul 17
17:27:31 2020 -0700
+++ b/src/java.base/share/classes/java/util/Properties.java Sun Jul 19
17:57:28 2020 +0800
@@ -1405,6 +1405,21 @@
}
@Override
+ public boolean equals(Object o) {
+ return o == this || entrySet.equals(o);
+ }
+
+ @Override
+ public int hashCode() {
+ return entrySet.hashCode();
+ }
+
+ @Override
+ public String toString() {
+ return entrySet.toString();
+ }
+
+ @Override
public boolean removeAll(Collection<?> c) {
return entrySet.removeAll(c);
}
diff -r 72bf0aca309e -r 4f359fdb3df3
test/jdk/java/util/Properties/PropertiesEntrySetTest.java
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/test/jdk/java/util/Properties/PropertiesEntrySetTest.java Sun Jul 19
17:57:28 2020 +0800
@@ -0,0 +1,201 @@
+/*
+ * Copyright (c) 2020, 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 if you need additional information or have any
+ * questions.
+ */
+
+/*
+ * @test
+ * @bug 8245694
+ * @summary tests the entrySet() method of Properties class
+ * @author Yu Li
+ * @run testng PropertiesEntrySetTest
+ */
+
+import org.testng.annotations.Test;
+
+import java.util.Properties;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertThrows;
+import static org.testng.Assert.assertTrue;
+
+public class PropertiesEntrySetTest {
+
+ @Test
+ public void testEquals() {
+ Properties a = new Properties();
+ var aEntrySet = a.entrySet();
+ assertFalse(aEntrySet.equals(null));
+ assertTrue(aEntrySet.equals(aEntrySet));
+
+ Properties b = new Properties();
+ var bEntrySet = b.entrySet();
+ assertTrue(bEntrySet.equals(aEntrySet));
+ assertTrue(bEntrySet.hashCode() == aEntrySet.hashCode());
+
+ a.setProperty("p1", "1");
+ assertFalse(bEntrySet.equals(aEntrySet));
+ assertFalse(bEntrySet.hashCode() == aEntrySet.hashCode());
+
+ b.setProperty("p1", "1");
+ assertTrue(aEntrySet.equals(bEntrySet));
+ assertTrue(bEntrySet.hashCode() == aEntrySet.hashCode());
+
+ Properties c = new Properties();
+ c.setProperty("p1", "2");
+ var cEntrySet = c.entrySet();
+ assertFalse(cEntrySet.equals(bEntrySet));
+ assertFalse(bEntrySet.hashCode() == cEntrySet.hashCode());
+ assertFalse(cEntrySet.equals(aEntrySet));
+ assertFalse(aEntrySet.hashCode() == cEntrySet.hashCode());
+
+ a.setProperty("p2", "2");
+ Properties d = new Properties();
+ d.setProperty("p2", "2");
+ d.setProperty("p1", "1");
+ var dEntrySet = d.entrySet();
+ assertTrue(dEntrySet.equals(aEntrySet));
+ assertTrue(aEntrySet.hashCode() == dEntrySet.hashCode());
+
+ a.remove("p1");
+ assertFalse(aEntrySet.equals(dEntrySet));
+ assertFalse(aEntrySet.hashCode() == dEntrySet.hashCode());
+
+ d.remove("p1", "1");
+ assertTrue(dEntrySet.equals(aEntrySet));
+ assertTrue(aEntrySet.hashCode() == dEntrySet.hashCode());
+
+ a.clear();
+ assertFalse(aEntrySet.equals(dEntrySet));
+ assertFalse(aEntrySet.hashCode() == dEntrySet.hashCode());
+ assertTrue(aEntrySet.isEmpty());
+
+ d.clear();
+ assertTrue(dEntrySet.equals(aEntrySet));
+ assertTrue(aEntrySet.hashCode() == dEntrySet.hashCode());
+ assertTrue(dEntrySet.isEmpty());
+ }
+
+ @Test
+ public void testToString() {
+ Properties a = new Properties();
+ var aEntrySet = a.entrySet();
+ assertEquals(aEntrySet.toString(), "[]");
+
+ a.setProperty("p1", "1");
+ assertEquals(aEntrySet.toString(), "[p1=1]");
+
+ a.setProperty("p2", "2");
+ assertEquals(aEntrySet.size(), 2);
+ assertTrue(aEntrySet.toString().trim().startsWith("["));
+ assertTrue(aEntrySet.toString().contains("p1=1"));
+ assertTrue(aEntrySet.toString().contains("p2=2"));
+ assertTrue(aEntrySet.toString().trim().endsWith("]"));
+
+ Properties b = new Properties();
+ b.setProperty("p2", "2");
+ b.setProperty("p1", "1");
+ var bEntrySet = b.entrySet();
+ assertEquals(bEntrySet.size(), 2);
+ assertTrue(bEntrySet.toString().trim().startsWith("["));
+ assertTrue(bEntrySet.toString().contains("p1=1"));
+ assertTrue(bEntrySet.toString().contains("p2=2"));
+ assertTrue(bEntrySet.toString().trim().endsWith("]"));
+
+ b.setProperty("p0", "0");
+ assertEquals(bEntrySet.size(), 3);
+ assertTrue(bEntrySet.toString().contains("p0=0"));
+
+ b.remove("p1");
+ assertEquals(bEntrySet.size(), 2);
+ assertFalse(bEntrySet.toString().contains("p1=1"));
+ assertTrue(bEntrySet.toString().trim().startsWith("["));
+ assertTrue(bEntrySet.toString().contains("p0=0"));
+ assertTrue(bEntrySet.toString().contains("p2=2"));
+ assertTrue(bEntrySet.toString().trim().endsWith("]"));
+
+ b.remove("p0", "0");
+ assertEquals(bEntrySet.size(), 1);
+ assertFalse(bEntrySet.toString().contains("p0=0"));
+ assertTrue(bEntrySet.toString().trim().startsWith("["));
+ assertTrue(bEntrySet.toString().contains("p2=2"));
+ assertTrue(bEntrySet.toString().trim().endsWith("]"));
+
+ b.clear();
+ assertTrue(bEntrySet.isEmpty());
+ assertTrue(bEntrySet.toString().equals("[]"));
+ }
+
+ @Test
+ public void testEntrySetWithoutException() {
+ Properties a = new Properties();
+ a.setProperty("p1", "1");
+ a.setProperty("p2", "2");
+ var aEntrySet = a.entrySet();
+ assertEquals(aEntrySet.size(), 2);
+
+ var i = aEntrySet.iterator();
+ var e1 = i.next();
+ i.remove();
+ assertFalse(aEntrySet.contains(e1));
+ assertEquals(aEntrySet.size(), 1);
+
+ var e2 = i.next();
+ aEntrySet.remove(e2);
+ assertFalse(aEntrySet.contains(e2));
+ assertTrue(aEntrySet.isEmpty());
+
+ a.setProperty("p1", "1");
+ a.setProperty("p3", "3");
+ Properties b = new Properties();
+ b.setProperty("p2", "2");
+ b.setProperty("p1", "1");
+ var bEntrySet = b.entrySet();
+
+ assertFalse(bEntrySet.containsAll(aEntrySet));
+ assertEquals(bEntrySet.size(), 2);
+
+ assertTrue(bEntrySet.removeAll(aEntrySet));
+ assertEquals(bEntrySet.size(), 1);
+
+ assertTrue(bEntrySet.retainAll(aEntrySet));
+ assertTrue(bEntrySet.isEmpty());
+ assertEquals(aEntrySet.size(), 2);
+
+ aEntrySet.clear();
+ assertTrue(aEntrySet.isEmpty());
+ }
+
+ @Test
+ public void testEntrySetExceptionWhenAdd() {
+ Properties a = new Properties();
+ a.setProperty("p1", "1");
+ var aEntrySet = a.entrySet();
+
+ Properties b = new Properties();
+ b.setProperty("p2", "2");
+ var bEntrySet = b.entrySet();
+
+ assertThrows(UnsupportedOperationException.class, () ->
aEntrySet.addAll(bEntrySet));
+ assertThrows(UnsupportedOperationException.class, () ->
aEntrySet.add(bEntrySet.iterator().next()));
+ }
+}
\ No newline at end of file
Best regards,
Yu L.
On Tue, Jun 23, 2020 at 12:32 AM Lisa Li <liyu.italy at gmail.com> wrote:
> Great, thanks Julia!
>
> Best regards,
> Yu L.
>
> On Mon, Jun 22, 2020 at 9:56 PM Julia Boes <julia.boes at oracle.com> wrote:
>
>> Hi Yu,
>>
>> Just to confirm, for
>> src/java.base/share/classes/java/util/Properties.java the copyright should
>> be updated as :
>>
>> + * Copyright (c) 1995, 2020, Oracle and/or its affiliates. All rights
>>
>> Because 1995 was the year when the file was added, while 2020 when this
>> change is made. Correct me if I'm wrong.
>>
>> That's right!
>>
>> Cheers,
>>
>> Julia
>>
>>
>>
More information about the core-libs-dev
mailing list