On Tue, 6 Jun 2023 15:56:45 GMT, Andy Goryachev <[email protected]> wrote:
>> modules/javafx.controls/src/main/java/javafx/scene/control/skin/TreeTableRowSkin.java
>> line 117:
>>
>>> 115: TreeTableView<T> treeTableView =
>>> getSkinnable().getTreeTableView();
>>> 116: if (treeTableView == null) {
>>> 117:
>>> registerInvalidationListener(getSkinnable().treeTableViewProperty(), (x) ->
>>> {
>>
>> One question here: Why does this prevent the leak but the ListenerHelper
>> does not?
>
> The difference is that registerInvalidationListener() adds a weak listener,
> while ListenerHelper adds a strong listener.
>
> It is possible to use ListenerHelper here, at the expense of more complicated
> code since we'd need to explicitly disconnect the listener when
> tableViewProperty value gets set.
>
> Another solution would involve adding a method to add a weak listener to the
> ListenerHelper to avoid explicit cleanup, or
>
> Go back to the original code which used register/unregister*Listener **in
> this particular case**.
Okay, makes sense.
-------------
PR Review Comment: https://git.openjdk.org/jfx/pull/1129#discussion_r1220038627