RFR: 7083187: Class CSS.CssValue is missing implementations of equals() and hashCode() [v7]
Alexey Ivanov
aivanov at openjdk.org
Fri May 19 16:46:59 UTC 2023
On Tue, 9 May 2023 06:44:20 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
>
> Prasanta Sadhukhan has updated the pull request incrementally with one additional commit since the last revision:
>
> hashCode fix
Can all the subclasses of `CssValue` be compared with correct result?
src/java.desktop/share/classes/javax/swing/text/html/CSS.java line 2223:
> 2221: @Override
> 2222: public boolean equals(Object val) {
> 2223: return val instanceof CSS.FontSize size && value == size.value;
What about different units? `font-size: 1em` shouldn't be equal to `font-size: 1ex`, should it?
What about keywords? Currently, declarations `font-size: smaller` and `font-size: larger` are considered equal.
src/java.desktop/share/classes/javax/swing/text/html/CSS.java line 2334:
> 2332: public boolean equals(Object val) {
> 2333: return val instanceof CSS.FontFamily font
> 2334: && Objects.equals(family, font.family);
Could you be consistent?
The indentation at [lines 2035-2036](https://github.com/openjdk/jdk/pull/13405/files/2bc265cdb1ed0d070b21233ff9982758bef6da71..717d1a1d4e8a3eb0cea848a7e8800210f30660fd#diff-e2c9b23b1844fa877fb1c4f048a8a8b85cd21d146f963837e039ab20b9560fe7R2036) above is different.
Personally, I would align `&&` with `v` of `val`; aligning to start of `instanceof` look good too, I prefer it compared to 8-column indent you used above.
src/java.desktop/share/classes/javax/swing/text/html/CSS.java line 2680:
> 2678: if (percentage) {
> 2679: return false;
> 2680: } else {
Why are percentage values never equal?
I expect two attribute sets produced from `"margin-top: 100%"` to be equal. However, the real length on rendering could be different if the attribute is applied to different elements.
src/java.desktop/share/classes/javax/swing/text/html/CSS.java line 2681:
> 2679: return false;
> 2680: } else {
> 2681: return val instanceof CSS.LengthValue lu && span == lu.span;
What about different units? "1mm" should not be equal to "1cm", should it?
-------------
Changes requested by aivanov (Reviewer).
PR Review: https://git.openjdk.org/jdk/pull/13405#pullrequestreview-1434591382
PR Review Comment: https://git.openjdk.org/jdk/pull/13405#discussion_r1199147541
PR Review Comment: https://git.openjdk.org/jdk/pull/13405#discussion_r1199063559
PR Review Comment: https://git.openjdk.org/jdk/pull/13405#discussion_r1199144022
PR Review Comment: https://git.openjdk.org/jdk/pull/13405#discussion_r1199144367
More information about the client-libs-dev
mailing list