This issue is an extension of RT-30626, bullet # 1; similar but different.
Assume a tree with nodes "One", "Two" and "Three", all three nodes contracted, all with children, using Java 8, build b111.
Click on node "One" results in:
wasAdded getAddedSize()=1
Contents of ListChangeListener.Change.getList() follows:
iTreeItem=TreeItem [ value: "One" ]
{No issue here.}
Shift-click on node "Three" results in:
wasAdded getAddedSize()=2, contents of ListChangeListener.Change.getList() follows:
iTreeItem=TreeItem [ value: "One" ]
iTreeItem=TreeItem [ value: "Two" ]
iTreeItem=TreeItem [ value: "Three" ]
{No issue here.}
Expand node "One" results in:
wasPermutated, contents of ListChangeListener.Change.getList() follows:
iTreeItem=TreeItem [ value: "One" ]
iTreeItem=TreeItem [ value: "Two" ]
iTreeItem=TreeItem [ value: "Three" ]
{Ideally, there would be no event, because getList() hasn't changed. But workable.}
Contract node "One" results in:
wasAdded getAddedSize()=1, contents of ListChangeListener.Change.getList() follows:
iTreeItem=TreeItem [ value: "One" ]
iTreeItem=null
iTreeItem=null
{Bug: wasAdded event when nothing was added. Also, null elements in getList().}
...then a second event fires, as opposed to a second item from ListChangeListener.Change.next()...
wasPermutated, contents of ListChangeListener.Change.getList() follows:
iTreeItem=TreeItem [ value: "One" ]
iTreeItem=TreeItem [ value: "Two" ]
iTreeItem=TreeItem [ value: "Three" ]
{Ideally, there would be no event, because getList() hasn't changed. But workable.}
If you can't easily duplicate with your favorite test code, let me know, and I'll pull together a short app that demonstrates the issue.
Assume a tree with nodes "One", "Two" and "Three", all three nodes contracted, all with children, using Java 8, build b111.
Click on node "One" results in:
wasAdded getAddedSize()=1
Contents of ListChangeListener.Change.getList() follows:
iTreeItem=TreeItem [ value: "One" ]
{No issue here.}
Shift-click on node "Three" results in:
wasAdded getAddedSize()=2, contents of ListChangeListener.Change.getList() follows:
iTreeItem=TreeItem [ value: "One" ]
iTreeItem=TreeItem [ value: "Two" ]
iTreeItem=TreeItem [ value: "Three" ]
{No issue here.}
Expand node "One" results in:
wasPermutated, contents of ListChangeListener.Change.getList() follows:
iTreeItem=TreeItem [ value: "One" ]
iTreeItem=TreeItem [ value: "Two" ]
iTreeItem=TreeItem [ value: "Three" ]
{Ideally, there would be no event, because getList() hasn't changed. But workable.}
Contract node "One" results in:
wasAdded getAddedSize()=1, contents of ListChangeListener.Change.getList() follows:
iTreeItem=TreeItem [ value: "One" ]
iTreeItem=null
iTreeItem=null
{Bug: wasAdded event when nothing was added. Also, null elements in getList().}
...then a second event fires, as opposed to a second item from ListChangeListener.Change.next()...
wasPermutated, contents of ListChangeListener.Change.getList() follows:
iTreeItem=TreeItem [ value: "One" ]
iTreeItem=TreeItem [ value: "Two" ]
iTreeItem=TreeItem [ value: "Three" ]
{Ideally, there would be no event, because getList() hasn't changed. But workable.}
If you can't easily duplicate with your favorite test code, let me know, and I'll pull together a short app that demonstrates the issue.