Bug 87662 [PropertiesView] NPE in PropertySheetViewer.updateChildrenOf
3.1 M5 An NPE can occur in PropertySheetViewer.updateChildrenOf if one of the top level items has null data. Although this should never happen, apparently it can (not sure how). Caused by: java.lang.NullPointerException at org.eclipse.ui.views.properties.PropertySheetViewer.updateChildrenOf(PropertySheetViewer.java:1117) at org.eclipse.ui.views.properties.PropertySheetViewer.setInput(PropertySheetViewer.java:850) at org.eclipse.ui.views.properties.PropertySheetPage.refresh(PropertySheetPage.java:397) at com.rational.clearcase.RSCMService$19.run(RSCMService.java:4459) at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:118) In this last exception, at line 1117, this line in the code reads: item.dispose(); In the code from updateChildrenOf containing 1117 we have: Set set = new HashSet(childItems.length * 2 + 1); for (int i = 0; i < childItems.length; i++) { Object data = childItems[i].getData(); if (data != null) { Object e = data; int ix = children.indexOf(e); if (ix < 0) { // not found removeItem(childItems[i]); } else { // found set.add(e); } } else if (data == null) { // the dummy item.dispose(); <----------------line 1117 } }
bundles/org.eclipse.ui.views/src/org/eclipse/ui/views/properties/PropertySheetViewer.java
/**
     * Update the given entry (but not its children or parent)
     * 
     * @param entry
     *            the entry we will update
     * @param item
     *            the tree item for the given entry
     */
    private void updateEntry(IPropertySheetEntry entry, TreeItem item) {
        
        item.setData(entry);
        
        item.setText(0, entry.getDisplayName());
        item.setText(1, entry.getValueAsString());
        Image image = entry.getImage();
        if (item.getImage(1) != image)
            item.setImage(1, image);
        
        updatePlus(entry, item);
    }
    /**
     * Updates the "+"/"-" icon of the tree item from the given entry
     * or category.
     *
     * @param node the entry or category
     * @param item the tree item being updated
     */
    private void updatePlus(Object node, TreeItem item) {
        
        IPropertySheetEntry entry = null;