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
TableItem ti = item;
			colorAndFontCollector.setFontsAndColors(element);
			
			
			
			for (int column = 0; column < columnCount || column == 0; column++) {
				
				String text = "";
				Image image = null;
				tableColorAndFont.setFontsAndColors(ti,element,column);
				if (tprov == null) {
					if (column == 0) {
						ViewerLabel updateLabel = new ViewerLabel(item
								.getText(), item.getImage());
						buildLabel(updateLabel,element);
						
 
			            
						if (item.isDisposed()) {
			                unmapElement(element);
			                return;
			            }   
						
						text = updateLabel.getText();
						image = updateLabel.getImage();
					}
				} else {
					text = tprov.getColumnText(element, column);
					image = tprov.getColumnImage(element, column);
				}