Revision: 10624
Author: jlaba...@google.com
Date: Wed Sep 7 09:07:21 2011
Log: Ensures that we cleanup CellTree nodes when we are done using
them. Currently, some deleted nodes aren't cleaned up, which leads to JS
errors when the last node of a CellTree is removed. Even when the errors do
not occur, forgetting to cleanup the nodes leaves stale event handlers on
the tree.
Issue: 6677
Review at http://gwt-code-reviews.appspot.com/1542803
Review by: skybr...@google.com
http://code.google.com/p/google-web-toolkit/source/detail?r=10624
Modified:
/trunk/user/src/com/google/gwt/user/cellview/client/CellTreeNodeView.java
/trunk/user/test/com/google/gwt/user/cellview/client/AbstractCellTreeTestBase.java
=======================================
---
/trunk/user/src/com/google/gwt/user/cellview/client/CellTreeNodeView.java
Thu Jul 28 04:03:54 2011
+++
/trunk/user/src/com/google/gwt/user/cellview/client/CellTreeNodeView.java
Wed Sep 7 09:07:21 2011
@@ -211,7 +211,8 @@
int childCount = nodeView.children.size();
while (childCount > size) {
childCount--;
- nodeView.children.remove(childCount);
+ CellTreeNodeView<?> deleted =
nodeView.children.remove(childCount);
+ deleted.cleanup(true);
}
// Reattach the open nodes.
=======================================
---
/trunk/user/test/com/google/gwt/user/cellview/client/AbstractCellTreeTestBase.java
Fri Dec 10 10:16:22 2010
+++
/trunk/user/test/com/google/gwt/user/cellview/client/AbstractCellTreeTestBase.java
Wed Sep 7 09:07:21 2011
@@ -201,6 +201,24 @@
public String getModuleName() {
return "com.google.gwt.user.cellview.CellView";
}
+
+ /**
+ * Issue 6677: Deleting the last element on a CellTree causes NPE in IE.
+ */
+ public void testDeleteLastNode() {
+ // Remove all but the last tree node from the model.
+ TreeNode root = tree.getRootTreeNode();
+ for (int i = 0; i < 9; i++) {
+ model.rootDataProvider.getList().remove(0);
+ }
+ model.rootDataProvider.flush();
+ assertEquals(1, root.getChildCount());
+
+ // Remove the last tree node.
+ model.rootDataProvider.getList().remove(0);
+ model.rootDataProvider.flush();
+ assertEquals(0, root.getChildCount());
+ }
public void testGetRootNode() {
TreeNode root = tree.getRootTreeNode();
--
http://groups.google.com/group/Google-Web-Toolkit-Contributors