Re-examine the risks of JDK-8264770 breaking third party libraries and applications.

John Hendrikx hjohn at xs4all.nl
Sun Aug 29 15:22:52 UTC 2021



On 29/08/2021 01:34, Nir Lisker wrote:
>>
>> This actually isn't an issue because adding an invalidation listener
>> revalidates the property as well (I'm not sure why, but I noticed this
>> before while working on fluent bindings).
>>
>
> There is an open issue on this:
> https://bugs.openjdk.java.net/browse/JDK-8208750.
>
> This is also the cause for the When binding evaluating the 'false' branch
> unneededly. Maybe this is a good time to have a look if this can be
> changed. The problem is finding how much code relies on this unspecified
> behavior.

Yeah, I fear that changing this now may introduce subtle problems, both 
in JavaFX itself and quite some user and library code.

Invalidation and ChangeListeners are quite often chosen without much 
thought in user code, where the consideration is more whether you want 
the old value or whether you want to avoid boxing.  Such code just calls 
"get" to make it similar to a ChangeListener, even though there still is 
a subtle difference which, in the current implementation, is hidden.

Current code using the invalidation + get variant would break if the 
property in question was already invalid at the time of registration, as 
then no further invalidations would be received in the absence of 
something external revalidating that property. Once it is revalidated 
once, the code would function as "intended", which further hides the 
problem (ie, problem only occurs once or only at startup or something).

If fixing this proves too risky, we probably should document 
Bindings#when with a warning and perhaps offer an alternative (fluent 
bindings or a new Bindings method that just takes a mapping function :)).

--John







More information about the openjfx-dev mailing list