> 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 with a new target base due to a merge or a rebase. The incremental webrev excludes the unrelated changes brought in by the merge/rebase. The pull request contains 20 additional commits since the last revision: - 8294809: map change listener - Merge remote-tracking branch 'origin/master' into 8294809.listener.helper - 8294809: generics - 8294809: is alive - Revert "8294809: removed weak listeners support" This reverts commit 2df4a85db638d76cacaf6c54ba669cdb3dd91a18. - 8294809: removed weak listeners support - 8294809: use weak reference correctly this time - 8294809: tests - 8294809: remove - 8294809: change listener with callback - ... and 10 more: https://git.openjdk.org/jfx/compare/ad0c8cb8...7a1fa625 ------------- Changes: - all: https://git.openjdk.org/jfx/pull/908/files - new: https://git.openjdk.org/jfx/pull/908/files/71ca35ee..7a1fa625 Webrevs: - full: https://webrevs.openjdk.org/?repo=jfx&pr=908&range=05 - incr: https://webrevs.openjdk.org/?repo=jfx&pr=908&range=04-05 Stats: 164 lines in 90 files changed: 61 ins; 11 del; 92 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