On Wed, 13 Nov 2024 18:10:30 GMT, Andy Goryachev <ango...@openjdk.org> wrote:

>> This PR fixes a bug where the `TableCell` indices can be outdated (not 
>> synchronized) with the `TableRow` index.
>> 
>> What normally happens is:
>> - Index is changed: Cell update is requested when the row is empty 
>> (otherwise noop)
>> - Item is changed: Cell update is requested, which will now update the 
>> indices of the underlying `TableCells`
>> 
>> Under some circumstances, when a `TableRow` is reused (e.g. index 60 -> 1) 
>> the item can be the same 
>> -> `oldIndex != newIndex && oldItem == newItem`
>> This can happen when the items of a `TableView` are changed, but some items 
>> are the same in both item lists (Think about a filter, where we filter down 
>> 60 to 2 items).
>> 
>> -> In this scenario, the cell update is not triggered, so the underlying 
>> `TableCell` indices will not be updated ever (e.g. they still have index 60 
>> set, but the row has 1 now). 
>> 
>> The fix is to always update the underlying `TableCell` indices when the 
>> `TableRow` index changed. 
>> While usually the item is different when the index changed, this is not 
>> always the case (there is no guarantee that the item changed, as we can see 
>> in the example, where the cell is reused).
>> 
>> ---
>> 
>> Also made sure that the issues linked in the code and ticket do not regress:
>> - https://bugs.openjdk.org/browse/JDK-8095357
>> - https://bugs.openjdk.org/browse/JDK-8115269
>
> modules/javafx.controls/src/test/java/test/javafx/scene/control/TableViewRowTest.java
>  line 222:
> 
>> 220:         row.updateIndex(0);
>> 221: 
>> 222:         List<TableCell<String, String>> cells = 
>> row.getChildrenUnmodifiable().stream().
> 
> minor suggestion: maybe reformat to keep one statement per line
> 
> 
> row.getChildrenUnmodifiable().stream().
>    filter(TableCell.class::isInstance).
>    map(e -> (TableCell<String, String>) e).
>    toList();

(here and elsewhere)

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

PR Review Comment: https://git.openjdk.org/jfx/pull/1635#discussion_r1840949564

Reply via email to