Bug 171415 [Viewers] Table viewer needs to clear label, image when items are reused
If an item is reused for a different element on a refresh, the table viewer needs to clear the label and image from the item being reused. This is necessary to communicate to the label provider that a new label is needed (i.e. the label provider may defer providing a label if decorators are not ready). This is what the tree viewer does. To see the problem, open the Java Browsing perspective and select a Java project. Then click between different packages. Notice that some of the labels in the Types list take a while to update. Opening one of these reveals that the label is showing the wrong text.
bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/TableViewer.java
* This class is not intended to be subclassed outside the viewer framework. It
 * is designed to be instantiated with a pre-existing SWT table control and
 * configured with a domain-specific content provider, table label provider,
 * element filter (optional), and element sorter (optional).
 * </p>
 * <p>
 * Label providers for table viewers must implement either the
 * <code>ITableLabelProvider</code> or the <code>ILabelProvider</code>
 * interface (see <code>TableViewer.setLabelProvider</code> for more details).
 * </p>
 * <p>
 * As of 3.1 the TableViewer now supports the SWT.VIRTUAL flag. If the
 * underlying table is SWT.VIRTUAL, the content provider may implement
 * {@link ILazyContentProvider} instead of {@link IStructuredContentProvider}.
 * Note that in this case, the viewer does not support sorting or filtering.
 * Also note that in this case, the Widget based APIs may return null if the
 * element is not specified or not created yet.
 * </p>
 * <p>
 * Users of SWT.VIRTUAL should also avoid using getItems() from the Table within
 * the TreeViewer as this does not necessarily generate a callback for the
 * TreeViewer to populate the items. It also has the side effect of creating all
 * of the items thereby eliminating the performance improvements of SWT.VIRTUAL.
 * </p>
 * 
 * @see SWT#VIRTUAL
 * @see #doFindItem(Object)
 * @see #internalRefresh(Object, boolean)
 */
public class TableViewer extends AbstractTableViewer {