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
/**
     * Creates a new tree item, sets the given entry or category (node)in
     * its user data field, and adds a listener to the node if it is an entry.
     * 
     * @param node
     *            the entry or category associated with this item
     * @param parent
     *            the parent widget
     * @param index
     *            indicates the position to insert the item into its parent
     */
    private void createItem(Object node, Widget parent, int index) {
        
        TreeItem item;
        if (parent instanceof TreeItem)
            item = new TreeItem((TreeItem) parent, SWT.NONE, index);
        else
            item = new TreeItem((Tree) parent, SWT.NONE, index);
        
        item.setData(node);
        
        if (node instanceof IPropertySheetEntry)
            ((IPropertySheetEntry) node)
                    .addPropertySheetEntryListener(entryListener);
        
        if (node instanceof IPropertySheetEntry)
            updateEntry((IPropertySheetEntry) node, item);
        else
            updateCategory((PropertySheetCategory) node, item);
    }