RFR: 8274061: Tree-/TableRowSkin: misbehavior on switching skin [v2]

Michael Strauß mstrauss at openjdk.java.net
Sun Oct 31 17:09:11 UTC 2021


On Wed, 27 Oct 2021 09:56:46 GMT, Jeanette Winzenburg <fastegal at openjdk.org> wrote:

>> Cleanup of Tree-/TableRowSkin to support switching skins
>> 
>> The misbehavior/s
>> - memory leaks due to manually registered listeners that were not removed
>> - side-effects due to listeners still active on old skin (like NPEs)
>> 
>> Fix
>> - use skin api for all listener registration (for automatic removal in dispose)
>> - do not install listeners that are not needed (fixedCellSize, same as in fix of ListCellSkin [JDK-8246745](https://bugs.openjdk.java.net/browse/JDK-8246745))
>> 
>> Added tests for each listener involved in the fix to guarantee it's still working and does not have unwanted side-effects after switching skins.
>> 
>> Note: there are pecularities in row skins (like not updating themselves on property changes of its control, throwing NPEs when not added to a VirtualFlow) which are not part of this issue but covered in [JDK-8274065](https://bugs.openjdk.java.net/browse/JDK-8274065)
>
> Jeanette Winzenburg has updated the pull request incrementally with one additional commit since the last revision:
> 
>   re-added forgotten code comments

modules/javafx.controls/src/main/java/javafx/scene/control/skin/TreeTableRowSkin.java line 299:

> 297:     @Override protected ObjectProperty<Node> graphicProperty() {
> 298:         TreeTableRow<T> treeTableRow = getSkinnable();
> 299:         // FIXME: illegal access if skinnable is null

What is the purpose of removing the null check, but leaving getSkinnable() in there?
Given the signature of the method, it seems that it shouldn't ever return `null` in any case.

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

PR: https://git.openjdk.java.net/jfx/pull/632


More information about the openjfx-dev mailing list