Bug 79180 [Viewers] TableViewer virtual manager may not handle programmatic scrolling
VirtualManager has a field currentVisibleIndex which holds the index of the last added item. This in itself is a major design bug since nobody guarantees in any way that items are created sequencially. A test case could easily be constructed in which after causing the creation of the the x first items the table is programatically scrolled to the middle or end jumping over any number of items. getCreatedItems() creates an array of size virtualManager.currentVisibleIndex. This array is ALWAYS smaller by 1 than the actual number of "visible" items. When creating item0 a 0 size array is returned, but 1 item is visible. When creating item1 a 1 size array is returned, but 2 items are visible ... Bug could easily be solved by creating an array of size currentVisibleIndex + 1. Also, shouldn't array copy be used here instead of the loop ? And ... why COPY the array ? ... will it be modified ? ... maybe 2 versions of the method should exist. Marcel
bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/TableViewer.java
* <p>
	 * This method is internal to the framework.
	 * </p>
	 * 
	 * @param index
	 *            the zero-based index
	 * @return the element at the given index, or <code>null</code> if the
	 *         index is out of range
	 */
	public Object getElementAt(int index) {
		if (index >= 0 && index < table.getItemCount()) {
			TableItem i = table.getItem(index);
			if (i != null)
				return i.getData();
		}
		return null;
	}
	/**
	 * The table viewer implementation of this <code>Viewer</code> framework
	 * method returns the label provider, which in the case of table viewers
	 * will be an instance of either <code>ITableLabelProvider</code> or
	 * <code>ILabelProvider</code>. If it is an
	 * <code>ITableLabelProvider</code>, then it provides a separate label
	 * text and image for each column. If it is an <code>ILabelProvider</code>,
	 * then it provides only the label text and image for the first column, and
	 * any remaining columns are blank.
	 */
	public IBaseLabelProvider getLabelProvider() {
		return super.getLabelProvider();
	}