diff --git a/modules/javafx.controls/src/main/java/javafx/scene/control/TreeTableView.java b/modules/javafx.controls/src/main/java/javafx/scene/control/TreeTableView.java index f6513a09e4b..dfa99181478 100644 --- a/modules/javafx.controls/src/main/java/javafx/scene/control/TreeTableView.java +++ b/modules/javafx.controls/src/main/java/javafx/scene/control/TreeTableView.java @@ -579,7 +579,7 @@ public static int getNodeLevel(TreeItem node) { @Override public Boolean call(TreeTableView table) { try { TreeItem rootItem = table.getRoot(); - if (rootItem == null) return false; + if (rootItem == null || rootItem.getChildren().isEmpty()) return false; TreeSortMode sortMode = table.getSortMode(); if (sortMode == null) return false; diff --git a/modules/javafx.controls/src/test/java/test/javafx/scene/control/TreeTableViewTest.java b/modules/javafx.controls/src/test/java/test/javafx/scene/control/TreeTableViewTest.java index 21c390eb062..fbb64a97bca 100644 --- a/modules/javafx.controls/src/test/java/test/javafx/scene/control/TreeTableViewTest.java +++ b/modules/javafx.controls/src/test/java/test/javafx/scene/control/TreeTableViewTest.java @@ -753,6 +753,32 @@ private void verifySelectionAfterPermutation() { treeTableView.sort(); } + @Test public void testNoIOOBEWhenSortingAfterSelectAndClearRootChildren() { + TreeTableView ttv = new TreeTableView<>(); + TreeItem root = new TreeItem<>("root"); + TreeItem child = new TreeItem<>("child"); + root.getChildren().add(child); + root.setExpanded(true); + ttv.setRoot(root); + ttv.setShowRoot(false); + + TreeTableColumn ttc = new TreeTableColumn<>("Column"); + ttv.getSortOrder().add(ttc); + + ttv.getSelectionModel().select(0); + root.getChildren().remove(0); + ControlTestUtils.runWithExceptionHandler(() -> { + ttv.sort(); + }); + } + + @Test public void testNPEWhenRootItemIsNull() { + TreeTableView ttv = new TreeTableView<>(); + ControlTestUtils.runWithExceptionHandler(() -> { + ttv.sort(); + }); + } + @Test public void testChangingSortPolicyUpdatesItemsList() { TreeTableColumn col = initSortTestStructure(); col.setSortType(DESCENDING);