[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-openjfx-dev
Subject:    Re: RFR: 8294809: ListenerHelper for managing and disconnecting listeners [v8]
From:       Andy Goryachev <angorya () openjdk ! org>
Date:       2022-10-31 16:45:51
Message-ID: wwwRDIM3q4ye-5uW90QaqQqvQcknBc5L4CWvOivhMRc=.d53e72fa-6358-475c-84c2-1b4ed53c0980 () github ! com
[Download RAW message or body]

> Introduction
> 
> There is a number of places where various listeners (strong as well as weak) are \
> added, to be later disconnected in one go. For example, Skin implementations use \
> dispose() method to clean up the listeners installed in the corresponding Control \
> (sometimes using LambdaMultiplePropertyChangeListenerHandler class). 
> This pattern is also used by app developers, but there is no public utility class \
> to do that, so every one must invent their own, see for instance \
> https://github.com/andy-goryachev/FxTextEditor/blob/master/src/goryachev/fx/FxDisconnector.java
>  
> Proposal
> 
> It might be beneficial to create a class (ListenerHelper, feel free to suggest a \
> better name) which: 
> - provides convenient methods like addChangeListener, addInvalidationListener, \
>                 addWeakChangeListener, etc.
> - keeps track of the listeners and the corresponding ObservableValues
> - provides a single disconnect() method to remove all the listeners in one go.
> - optionally, it should be possible to add a lambda (Runnable) to a group of \
>                 properties
> - optionally, there should be a boolean flag to fire the lambda immediately
> - strongly suggest implementing an IDisconnectable functional interface with a \
> single disconnect() method 
> Make it Public Later
> 
> Initially, I think we could place the new class in package \
> com.sun.javafx.scene.control; to be made publicly accessible later. 
> Where It Will Be Useful
> 
> [JDK-8294589](https://bugs.openjdk.org/browse/JDK-8294589) "MenuBarSkin: memory \
> leak when changing skin" and other skins, as a replacement for \
> LambdaMultiplePropertyChangeListenerHandler. 
> https://github.com/openjdk/jfx/pull/908#:~:text=19%20hours%20ago-,8295175%3A%20SplitPaneSkinSkin%3A%20memory%20leak%20when%20changing%20skin%20%23911,-Draft
>  
> https://github.com/openjdk/jfx/pull/914

Andy Goryachev has updated the pull request incrementally with one additional commit \
since the last revision:

  8294809: whitespace

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

Changes:
  - all: https://git.openjdk.org/jfx/pull/908/files
  - new: https://git.openjdk.org/jfx/pull/908/files/e78ed6db..e0e0aabb

Webrevs:
 - full: https://webrevs.openjdk.org/?repo=jfx&pr=908&range=07
 - incr: https://webrevs.openjdk.org/?repo=jfx&pr=908&range=06-07

  Stats: 1 line in 1 file changed: 0 ins; 0 del; 1 mod
  Patch: https://git.openjdk.org/jfx/pull/908.diff
  Fetch: git fetch https://git.openjdk.org/jfx pull/908/head:pull/908

PR: https://git.openjdk.org/jfx/pull/908


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic