RFR: JDK-8304933: BitSet (used for CSS pseudo class states) listener management is incorrect

John Hendrikx jhendrikx at openjdk.org
Mon Apr 3 07:26:26 UTC 2023


On Mon, 3 Apr 2023 06:29:29 GMT, Michael Strauß <mstrauss at openjdk.org> wrote:

>> BitSet uses the SetListenerHelper abstraction to prevent allocating the listener arrays.
>> 
>> When removing listeners, the newly returned listener helper (which may be different from the one called) is not reassigned. This effectively means that removing the listener does not happen.
>> 
>> This fix correctly assigns the potentially changed SetListenerHelper instance to BitSet's helper field after listener removal.
>
> modules/javafx.graphics/src/main/java/com/sun/javafx/css/BitSet.java line 603:
> 
>> 601:     @Override
>> 602:     public void removeListener(SetChangeListener<? super T> setChangeListener) {
>> 603:         if (setChangeListener != null) {
> 
> Even if not explicitly specified for `ObservableSet.removeListener(SetChangeListener)`, implementations generally reject `null` arguments by throwing NPE. This is the default behavior of `SetListenerHelper`.

I could remove these checks in this PR, or as part of the larger `BitSet` clean-up PR.   The extra check doesn't break anything though, while this PR is mainly focused on fixing a long standing bug that everyone dealing with `ObservableSet<PseudoClass>` can encounter currently.

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

PR Review Comment: https://git.openjdk.org/jfx/pull/1071#discussion_r1155572378


More information about the openjfx-dev mailing list