RFR: 8290310: ChangeListener events are incorrect or misleading when a nested change occurs [v7]
Kevin Rushforth
kcr at openjdk.org
Mon Feb 20 15:58:41 UTC 2023
On Mon, 20 Feb 2023 05:42:43 GMT, John Hendrikx <jhendrikx at openjdk.org> wrote:
>> This contains the following:
>> - Nested changes or invalidations using ExpressionHelper are delayed until the current emission completes
>> - This fixes odd change events being produced (with incorrect oldValue)
>> - Also fixes a bug in ExpressionHelper where a nested change would unlock the listener list early, which could cause a `ConcurrentModificationException` if a nested change was combined with a remove/add listener call
>> - A test for ExpressionHelper to verify the new behavior
>> - A test for all *Property and *Binding classes that verifies correct listener behavior at the API level (this tests gets 85% coverage on ExpressionHelper on its own, the only thing it is not testing is the locking behavior, which is not relevant at the API level).
>> - A fix for `WebColorFieldSkin` which triggered a nested change which used a flag to prevent an event loop (I've changed it now to match how `DoubleFieldSkin` and `IntegerFieldSkin` do it
>
> John Hendrikx has updated the pull request incrementally with three additional commits since the last revision:
>
> - Ensure change listeners are not called recursively (single and generic)
> - Remove left over System.out.println's
> - Introduce Emission enum to make logic clearer
>
> The logic only has three states, but using two booleans for this allows
> for four states.
I see that the same unit test has failed on all three platforms after your latest change.
-------------
PR: https://git.openjdk.org/jfx/pull/837
More information about the openjfx-dev
mailing list