RFR: 7083187: Class CSS.CssValue is missing implementations of equals() and hashCode()

Alexey Ivanov aivanov at openjdk.org
Wed Apr 12 16:12:35 UTC 2023


On Mon, 10 Apr 2023 12:44:08 GMT, Prasanta Sadhukhan <psadhukhan at openjdk.org> wrote:

> Two CSS AttributeSet-s can be compared using the AttributeSet.isEqual() method which can fail due to missing implementation of equals method in CSS subclasses.
> In this issue, even when two CSS AttributeSet has same 42 font size string value, Object equality fails.
> Fixed by implementing the equality and hashCode method for CSS.FontSize class.
> 
> All jtreg/jck tests are ok

The change looks good but it doesn't address the whole problem raised in the [JDK-7083187](https://bugs.openjdk.org/browse/JDK-7083187): `CSS.CssValue` does not implement `equals`. This fix addresses only one particular case: `CSS.FontSize` for `font-size` property.

I do not think it resolves the problem *entirely*: `CssValue` and all its subclasses must implement `equals` method, otherwise adding another CSS attribute to `AttributeSet` will lead to this same issue described in the bug report.

src/java.desktop/share/classes/javax/swing/text/html/CSS.java line 2203:

> 2201:         }
> 2202: 
> 2203:         public int hashCode() {

You should add `@Override` annotation and to `equals` method too.

src/java.desktop/share/classes/javax/swing/text/html/CSS.java line 2213:

> 2211:                 return false;
> 2212:             }
> 2213:             return false;

Suggestion:

            return val instanceof CSS.FontSize size && value == size.value;


I won't insist though.

test/jdk/javax/swing/text/html/CSS/CSSBug.java line 25:

> 23: /*
> 24:  * @test
> 25:  * @key headful

Does it need to be headful?

test/jdk/javax/swing/text/html/CSS/CSSBug.java line 34:

> 32: import javax.swing.text.html.StyleSheet;
> 33: 
> 34: public class CSSBug {

Could this be a more specific name? I believe the agreement is giving descriptive test names, right?

test/jdk/javax/swing/text/html/CSS/CSSBug.java line 47:

> 45: 
> 46:         if (a.isEqual( b) ) {
> 47:             System.out.println( "a equals b");

Could you please the remove the extra spaces after and before the parentheses.

-------------

Changes requested by aivanov (Reviewer).

PR Review: https://git.openjdk.org/jdk/pull/13405#pullrequestreview-1381636095
PR Review Comment: https://git.openjdk.org/jdk/pull/13405#discussion_r1164340214
PR Review Comment: https://git.openjdk.org/jdk/pull/13405#discussion_r1164341958
PR Review Comment: https://git.openjdk.org/jdk/pull/13405#discussion_r1164342718
PR Review Comment: https://git.openjdk.org/jdk/pull/13405#discussion_r1164344571
PR Review Comment: https://git.openjdk.org/jdk/pull/13405#discussion_r1164345588



More information about the client-libs-dev mailing list