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 do not regress:
- https://bugs.openjdk.org/browse/JDK-8095357
- https://bugs.openjdk.org/browse/JDK-8115269

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

Commit messages:
 - 8344067: TableCell indices can be outdated with the TableRow index

Changes: https://git.openjdk.org/jfx/pull/1635/files
  Webrev: https://webrevs.openjdk.org/?repo=jfx&pr=1635&range=00
  Issue: https://bugs.openjdk.org/browse/JDK-8344067
  Stats: 169 lines in 5 files changed: 160 ins; 8 del; 1 mod
  Patch: https://git.openjdk.org/jfx/pull/1635.diff
  Fetch: git fetch https://git.openjdk.org/jfx.git pull/1635/head:pull/1635

PR: https://git.openjdk.org/jfx/pull/1635

Reply via email to