On Tue, 25 Feb 2025 19:05:23 GMT, Michael Strauß <mstra...@openjdk.org> wrote:

>> The `VetoableListDecorator` class does not override the default 
>> implementation of `List.sort()`. The default implementation copies the 
>> elements into an array, sorts the array, and then calls `List.set()` in a 
>> loop to sort the List **without removing the old elements first**. This 
>> leads to the `VetoableListDecorator` intercepting the call to `set()` and 
>> seeing a "duplicate child" being added.
>> 
>> The solution is to implement `SortableList.doSort()` with the following 
>> protocol:
>> 1. Make a copy of the list and sort it.
>> 2. Present the sorted list with `onProposedChange` for a potential veto.
>> 3. If successful, use `setAll()` to swap out the current list with the 
>> sorted list.
>
> Michael Strauß has updated the pull request with a new target base due to a 
> merge or a rebase. The pull request now contains five commits:
> 
>  - merge
>  - Merge branch 'master' into fixes/vetoable-list-decorator-sort
>    
>    # Conflicts:
>    #  
> modules/javafx.base/src/main/java/com/sun/javafx/collections/VetoableListDecorator.java
>  - factor out setAll implementation
>  - Implement sorting for VetoableListDecorator
>  - failing tests

Marked as reviewed by angorya (Reviewer).

modules/javafx.base/src/main/java/com/sun/javafx/collections/VetoableListDecorator.java
 line 127:

> 125: 
> 126:     private boolean setAllImpl(List<E> unmodifiableList) {
> 127:         onProposedChange(unmodifiableList, 0, size());

Have you thought of moving all the checks and wrapping into `setAllImpl()`?

Regardless of that, the current code is good.

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

PR Review: https://git.openjdk.org/jfx/pull/1674#pullrequestreview-2648772428
PR Review Comment: https://git.openjdk.org/jfx/pull/1674#discussion_r1974168926

Reply via email to