RFR 6470126 java.util.jar.Attributes#containsKey fails with Strings
Vipin Mv1
vipinmv1 at in.ibm.com
Tue Aug 4 09:51:00 UTC 2020
Hi,
Since, the use of strings and Attributes.Name is distributed over APIs, I have come up with a generic documentation. However any suggestions are welcome.
--- a/src/java.base/share/classes/java/util/jar/Attributes.java Thu Mar 26 15:26:51 2020 +0000
+++ b/src/java.base/share/classes/java/util/jar/Attributes.java Tue Aug 04 14:55:46 2020 +0530
@@ -49,7 +49,11 @@
* Attribute values can contain any characters and
* will be UTF8-encoded when written to the output stream. See the
* <a href="{@docRoot}/../specs/jar/jar.html">JAR File Specification</a>
- * for more information about valid attribute names and values.
+ * for more information about valid attribute names and values. While
+ * insertion, the attribute name (key) can be specified as a string or any
+ * objects of type Attribute.Name or its subclass. But during retrieval,
+ * attribute name (key) specified as a string is discouraged to avoid
+ * unpredictable results.
*
* <p>This map and its views have a predictable iteration order, namely the
* order that keys were inserted into the map, as with {@link LinkedHashMap}.
@@ -96,12 +100,32 @@
Thanks & Regards
Vipin MV
-----Vipin Mv1/India/IBM wrote: -----
To: Lance Andersen <lance.andersen at oracle.com>
From: Vipin Mv1/India/IBM
Date: 07/13/2020 07:13PM
Cc: core-libs-dev at openjdk.java.net
Subject: Re: [EXTERNAL] Re: RFR 6470126 java.util.jar.Attributes#containsKey fails with Strings
Hi Lance
Thanks for the detailed review. I will go ahead and look into the required documentation changes.
Thanks & Regards
Vipin MV
-----Lance Andersen <lance.andersen at oracle.com> wrote: -----
To: Vipin Mv1 <vipinmv1 at in.ibm.com>
From: Lance Andersen <lance.andersen at oracle.com>
Date: 07/10/2020 02:27AM
Cc: core-libs-dev at openjdk.java.net
Subject: [EXTERNAL] Re: RFR 6470126 java.util.jar.Attributes#containsKey fails with Strings
Hi Vipin,
Apologies for the delay.
After looking at the bug, which is over 14 years old, the SCCS history of Attributes.java, I am reluctant to suggest we move forward with your proposed change.
The key for an Attributes map entry should be an Attributes.Name object (see Attributes::put). Unfortunately your proposed fix introduces a behavioral change and could possibly break existing applications.
A behavioral change to existing public methods would require approval via a CSR and would require more compressive testing. I took a quick scan of the JCK tests and of the JTReg tests and I believe your change would cause some of the existing tests to fail.
>From my perspective, it would be better to clarify the Attributes javadoc to make it clearer that an Attributes.Name object is required (which I believe has not changed since the Attributes class was added to Java SE).
Best
Lance
On Jul 1, 2020, at 12:42 AM, Vipin Mv1 <vipinmv1 at in.ibm.com> wrote:
Hi,
A gentle reminder to please review this patch.
Thanks & Regards
Vipin MV
-----Vipin Mv1/India/IBM wrote: -----
To: core-libs-dev at openjdk.java.net
From: Vipin Mv1/India/IBM
Date: 06/15/2020 11:52AM
Subject: Re: RFR 6470126 java.util.jar.Attributes#containsKey fails with Strings
Hi,
I have addressed the review comments and the patch has been uploaded here:
http://cr.openjdk.java.net/~vtewari/6470126/webrev/index.html
Please let me know your suggestions.
Thanks & Regards
Vipin MV
-----Vipin Mv1/India/IBM wrote: -----
To: core-libs-dev at openjdk.java.net
From: Vipin Mv1/India/IBM
Date: 05/11/2020 05:00PM
Subject: RFR 6470126 java.util.jar.Attributes#containsKey fails with Strings
Hi,
Please review the fix for the following issue.
https://bugs.openjdk.java.net/browse/JDK-6470126
diff -r 53568400fec3 src/java.base/share/classes/java/util/jar/Attributes.java
--- a/src/java.base/share/classes/java/util/jar/Attributes.java Thu Mar 26 15:26:51 2020 +0000
+++ b/src/java.base/share/classes/java/util/jar/Attributes.java Mon May 11 15:00:01 2020 +0530
@@ -205,7 +205,10 @@
* @return true if this Map contains the specified attribute name
*/
public boolean containsKey(Object name) {
- return map.containsKey(name);
+ if(String.class.isInstance(name))
+ return map.containsKey(Name.of((String)name));
+ else
+ return map.containsKey(name);
}
/**
Thanks & Regards
Vipin Menon
Lance Andersen| Principal Member of Technical Staff | +1.781.442.2037
Oracle Java Engineering
1 Network Drive
Burlington, MA 01803
Lance.Andersen at oracle.com
More information about the core-libs-dev
mailing list