Fixing a bug in CellBrowser where losing an open node causes an exception the next time the CellBrowser is clicked. The code that nullifies the focusedKey in a node should be in the loop the trimes the tree down to size.

Review at http://gwt-code-reviews.appspot.com/1012801

Review by: pdr@google.com

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@9080 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/src/com/google/gwt/user/cellview/client/CellBrowser.java b/user/src/com/google/gwt/user/cellview/client/CellBrowser.java
index 7ab531e..8dcd61d 100644
--- a/user/src/com/google/gwt/user/cellview/client/CellBrowser.java
+++ b/user/src/com/google/gwt/user/cellview/client/CellBrowser.java
@@ -968,7 +968,7 @@
 
   /**
    * Set the open state of a tree node.
-   *
+   * 
    * @param cellList the CellList that changed state.
    * @param value the value to open
    * @param open true to open, false to close
@@ -1029,12 +1029,9 @@
       }
 
       // Close the node.
-      TreeNode closedNode = cellList.isFocusedOpen
+      TreeNode closedNode = (cellList.isFocusedOpen && (treeNodes.size() > cellList.level + 1))
           ? treeNodes.get(cellList.level + 1) : null;
       trimToLevel(cellList.level);
-      cellList.focusedKey = null;
-      cellList.focusedValue = null;
-      cellList.isFocusedOpen = false;
 
       // Refresh the display to update the styles for this node.
       if (redraw) {
@@ -1065,5 +1062,13 @@
       removed.destroy();
       curLevel--;
     }
+
+    // Nullify the focused key at the level.
+    if (level < treeNodes.size()) {
+      TreeNodeImpl<?> node = treeNodes.get(level);
+      node.display.focusedKey = null;
+      node.display.focusedValue = null;
+      node.display.isFocusedOpen = false;
+    }
   }
 }
diff --git a/user/test/com/google/gwt/user/cellview/client/AbstractCellTreeTestBase.java b/user/test/com/google/gwt/user/cellview/client/AbstractCellTreeTestBase.java
index 1f57b59..18bc2cc 100644
--- a/user/test/com/google/gwt/user/cellview/client/AbstractCellTreeTestBase.java
+++ b/user/test/com/google/gwt/user/cellview/client/AbstractCellTreeTestBase.java
@@ -387,6 +387,9 @@
 
     // Verify the node is destroyed.
     assertTrue(b.isDestroyed());
+
+    // True to open a new node.
+    assertNotNull(root.setChildOpen(0, true));
   }
 
   /**