On Wed, 6 Nov 2024 06:40:52 GMT, Andrey Turbanov <aturba...@openjdk.org> wrote:
>> If a thread-safe implementation is not needed, it is recommended to use >> HashMap instead of legacy synchronized Hashtable. >> Map `CSS.htmlAttrToCssAttrMap` is modified only within static initialization >> block and then only `get` method is called. >> >> The only subtle difference is that Hashtable doesn't allow `null` keys and >> throws NPE from `get` method. >> I've checked all possible keys which are passed to >> `htmlAttrToCssAttrMap.get`. >> Currently 3 different execution paths are possible: >> >> **1,2** >> When `HTML.Attribute.BORDER` is passed as a key. It's definitely non-null. >> >> javax.swing.text.html.CSS#translateHTMLToCSS >> translateAttribute(HTML.Attribute.BORDER, "1", cssAttrSet); >> CSS.Attribute[] cssAttrList = getCssAttribute(key); >> >> >> javax.swing.text.html.CSS#translateAttributes >> translateAttribute(HTML.Attribute.BORDER, Integer.toString(borderWidth), >> cssAttrSet); >> CSS.Attribute[] cssAttrList = getCssAttribute(key);` >> >> >> **3** >> When non-null `key` is passed as a key. >> >> javax.swing.text.html.CSS#translateAttributes >> >> if (name instanceof HTML.Attribute) { // from this `instanceof` we know >> that it's non-null >> HTML.Attribute key = (HTML.Attribute)name; >> >> translateAttribute(key, (String) htmlAttrSet.getAttribute(key), >> cssAttrSet); >> CSS.Attribute[] cssAttrList = getCssAttribute(key); >> >> >>  >> >> >> I've used HashMap.newHashMap method instead of constructor to avoid resizing >> of internal HashMap array. > > Andrey Turbanov has updated the pull request incrementally with one > additional commit since the last revision: > > Use immutable map instead of HashMap. > It fits even better: has the same null handling as Hashtable Looks good to me, except for a tiny nit. I ran clientlibs tests, no failures found. src/java.desktop/share/classes/javax/swing/text/html/CSS.java line 1119: > 1117: htmlAttrToCssAttrMap = Map.ofEntries( > 1118: Map.entry(HTML.Attribute.COLOR, > 1119: new CSS.Attribute[]{CSS.Attribute.COLOR}), Suggestion: Map.entry(HTML.Attribute.COLOR, new CSS.Attribute[]{CSS.Attribute.COLOR}), I'd align the wrapped line to the opening parenthesis, the difference is subtle in this case, yet it would follow the style used previously. ------------- Marked as reviewed by aivanov (Reviewer). PR Review: https://git.openjdk.org/jdk/pull/21785#pullrequestreview-2429784833 PR Review Comment: https://git.openjdk.org/jdk/pull/21785#discussion_r1838214567