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
return getFilteredEntries(entry.getChildEntries());
    }
    /**
     * Returns the child entries of the given category
     * 
     * @param category The category to search
     * 
     * @return the children of the given category (element type
     *         <code>IPropertySheetEntry</code>)
     */
    private List getChildren(PropertySheetCategory category) {
        return getFilteredEntries(category.getChildEntries());
    }
    /*
     * (non-Javadoc) Method declared on Viewer.
     */
    public Control getControl() {
        return tree;
    }
    /**
     * Returns the entries which match the current filter.
     *
     * @param entries the entries to filter
     * @return the entries which match the current filter
     *  (element type <code>IPropertySheetEntry</code>)
     */
    private List getFilteredEntries(IPropertySheetEntry[] entries) {
        
        if (isShowingExpertProperties)