Bug 109281 [Viewers] ContentViewer does not null out input on handleDisposed
While tracking down a possible leak I were calling viewer.setInput(null) when viewer.getInput()!=null but that gave an assert exception because the ContentProvider had been nulled out in handleDisposed(). I suggest you also null out Input to keep the state consistent since the code actually call inputChanged as if input had been nulled out. protected void handleDispose(DisposeEvent event) { if (contentProvider != null) { contentProvider.inputChanged(this, getInput(), null); contentProvider.dispose(); contentProvider = null; input = null; // add this line for consistency } if (labelProvider != null) { labelProvider.removeListener(labelProviderListener); labelProvider.dispose(); labelProvider = null; } }
bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/ContentViewer.java
*
     * @return the content provider, or <code>null</code> if none
     */
    public IContentProvider getContentProvider() {
        return contentProvider;
    }
    /**
     * The <code>ContentViewer</code> implementation of this <code>IInputProvider</code> 
     * method returns the current input of this viewer, or <code>null</code>
     * if none. The viewer's input provides the "model" for the viewer's
     * content.
     */
    public Object getInput() {
        return input;
    }
    /**
     * Returns the label provider used by this viewer.
     * <p>
     * The <code>ContentViewer</code> implementation of this method returns the label
     * provider recorded in an internal state variable; if none has been
     * set (with <code>setLabelProvider</code>) a <code>SimpleLabelProvider</code>
     * will be created, remembered, and returned.
     * Overriding this method is generally not required; 
     * however, if overriding in a subclass,
     * <code>super.getLabelProvider</code> must be invoked.
     * </p>
     *
     * @return a label provider
     */
    public IBaseLabelProvider getLabelProvider() {