On Tue, 21 Nov 2023 12:06:41 GMT, Tejesh R <t...@openjdk.org> wrote:

>> Table contents does not follow right-left Orientation when Max width of 
>> columns are set. This is due to not considering the offset in `x position` 
>> while painting table grid and table cell. The fix handles the offset and 
>> adjust the x position for each paint, similar to how header is painted. The 
>> fix is applied to both Basic and Synth Look and Feel. 
>> The fix is verified for all Look and Feel manually and test verifies on 
>> Metal L&F since automatic test cannot be generalized throughout other Look 
>> and Feel. 
>> CI tested is green for regression check and test check.
>
> Tejesh R has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   Review fix

Changes requested by aivanov (Reviewer).

src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTableUI.java line 
2031:

> 2029:             damagedArea.x = SwingUtilities2.getXPosInRightToLeft(table, 
> cMin);
> 2030:         } else {
> 2031:             damagedArea.x = SwingUtilities2.getXPosInRightToLeft(table, 
> cMax);

The method name `getXPosInRightToLeft` is confusing when you call it for the 
*left-to-right case*…

src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTableUI.java line 
2031:

> 2029:             damagedArea.x = SwingUtilities2.getXPosInRightToLeft(table, 
> cMin);
> 2030:         } else {
> 2031:             damagedArea.x = SwingUtilities2.getXPosInRightToLeft(table, 
> cMax);

Does it mean that `table.getCellRect` returns an incorrect value in 
right-to-left case?

src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTableUI.java line 
2088:

> 2086:                 cellRect = table.getCellRect(row, cMin, false);
> 2087:                 for (int column = cMin; column <= cMax; column++) {
> 2088:                     aColumn = cm.getColumn(column);

The bodies of the column loops are absolutely the same now, it asks for 
refactoring… Yet it could be an overkill.

src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTableUI.java line 
2100:

> 2098:             for (int row = rMin; row <= rMax; row++) {
> 2099:                 cellRect = table.getCellRect(row, cMax, false);
> 2100:                 cellRect.x = 
> SwingUtilities2.getXPosInRightToLeft(table, cMax);

Here, I have the same question: _Does it mean that `table.getCellRect` returns 
an incorrect value in right-to-left case?_

src/java.desktop/share/classes/javax/swing/plaf/basic/BasicTableUI.java line 
2108:

> 2106:                         paintCell(g, cellRect, row, column);
> 2107:                     }
> 2108:                     cellRect.x += columnWidth;

This is weird… if we paint columns in right-to-left order, x should decrease.

src/java.desktop/share/classes/sun/swing/SwingUtilities2.java line 2371:

> 2369:             return table.getWidth();
> 2370:         }
> 2371:         return table.getParent().getWidth();

The condition `table != null` seem redundant — if it's `null`, the expression 
`table.getParent()` in the return statement throws NPE.

test/jdk/javax/swing/JTable/JTableRightAlignmentTest.java line 98:

> 96:                                     table.table.getLocationOnScreen().y,
> 97:                                     table.table.getWidth() - 
> allColumnWidths,
> 98:                                     table.table.getHeight()));

This is the reason why I dislike the model design: `table.table` doesn't look 
good and is somewhat confusing. Moreover, `CustomTable` is not really _a table_ 
which makes the design even more confusing: a table contains a table.

I understand over-engineering a test is a waste of time, yet it feels too wrong 
this way. A clean test code will ease the work of another engineer who will 
need to deal with updating the test if anything changes.

test/jdk/javax/swing/JTable/JTableRightAlignmentTest.java line 161:

> 159:             "Salary",
> 160:     };
> 161:     List<CustomTable.Record> data = new ArrayList();

Suggestion:

    List<CustomTable.Record> data = new ArrayList<>();

The right side still uses raw type.

test/jdk/javax/swing/JTable/JTableRightAlignmentTest.java line 184:

> 182:             this.salary = salary;
> 183:         }
> 184:     }

What I meant is using `record` instead of a *`class`*:

Suggestion:

    record Data(String firstName, String lastName, float salary) {}

test/jdk/javax/swing/JTable/JTableRightAlignmentTest.java line 204:

> 202:                     return item.lastname;
> 203:                 case COL_SALARY:
> 204:                     return Float.valueOf(item.salary);

Suggestion:

                    return item.salary;

Explicit boxing is redundant.

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

PR Review: https://git.openjdk.org/jdk/pull/16374#pullrequestreview-1742186893
PR Review Comment: https://git.openjdk.org/jdk/pull/16374#discussion_r1400701062
PR Review Comment: https://git.openjdk.org/jdk/pull/16374#discussion_r1400704002
PR Review Comment: https://git.openjdk.org/jdk/pull/16374#discussion_r1400717209
PR Review Comment: https://git.openjdk.org/jdk/pull/16374#discussion_r1400704758
PR Review Comment: https://git.openjdk.org/jdk/pull/16374#discussion_r1400721169
PR Review Comment: https://git.openjdk.org/jdk/pull/16374#discussion_r1400744578
PR Review Comment: https://git.openjdk.org/jdk/pull/16374#discussion_r1400782701
PR Review Comment: https://git.openjdk.org/jdk/pull/16374#discussion_r1400784213
PR Review Comment: https://git.openjdk.org/jdk/pull/16374#discussion_r1400786843
PR Review Comment: https://git.openjdk.org/jdk/pull/16374#discussion_r1400788820

Reply via email to