RFR: 8290310: ChangeListener events are incorrect or misleading when a nested change occurs [v5]
Nir Lisker
nlisker at openjdk.org
Sat Feb 18 19:41:35 UTC 2023
On Sat, 18 Feb 2023 19:29:05 GMT, John Hendrikx <jhendrikx at openjdk.org> wrote:
> Confusing me again here :-) Did you mean to say "breadth-first" where you said "depth-first" ?
>
> Breadth first is for sure a lot easier, as the old values are much easier to get correct for it.
>
> I've given depth first some more thought, but every approach I think of requires some kind of stack or tracking of which listeners weren't notified yet of the original set that we wanted to notify (and I think we'll need to remember even more if there is another change before the first and second one finishes).
Yes, sorry, I meant breadth-first. We can go with that one.
> @nlisker if we're going for breadth-first, shall I fix the cases for single listeners as well (finish the notification before calling the same listener again, instead of recursively calling into it?)
I think that we need to be consistent, so barring any special reason for excepting single listeners from this change, I would say that we need to bring them in line with the generic listener.
> Perhaps we could limit the explanation to just mentioning that its possible the "new value" may not be the same as ObservableValue#getValue if nested changes occured. Also, I'm curious why it would still be a bad practice to modify the value again (now that the old values are always correct); I think it's pretty much the standard pattern to veto a change (like a numeric field rejecting out of range values or non-numeric characters).
I'll think about what doc changes to make. We'll see what Ambarish thinks too.
Vetoing seems like a normal use case, but maybe there's another way of doing it. I never delved into this.
-------------
PR: https://git.openjdk.org/jfx/pull/837
More information about the openjfx-dev
mailing list