Bug 141435 [Viewers] ListViewer without a selection loses scrolled state when refreshed
When the ListViewer does not contain a selection and is refreshed it loses its vertically scrolled to position. This is because AbstractListViewer removes all items and adds them back (it has to) when a refresh occurs. This is remedied in the use cases where there is a selection because the selected item is revealed after the refresh occurs. Without a selection no reveal can occur therefore it loses its position.
bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/AbstractListViewer.java
if (listMap != null) {
				listMap.clear();
			}
            unmapAllElements();
            List selection = getSelectionFromWidget();
            list.setRedraw(false);
			listRemoveAll();
            
            Object[] children = getSortedChildren(getRoot());
			String[] items = new String[children.length];
			
			ILabelProvider labelProvider = (ILabelProvider) getLabelProvider();
			
			for (int i = 0; i < items.length; i++) {
                Object el = children[i];
                items[i] = getLabelProviderText(labelProvider, el);
                listMap.add(el);
                mapElement(el, list); 
            }
			
			listSetItems(items);
            list.setRedraw(true);
            setSelectionToWidget(selection, false);
        } else {
            doUpdateItem(list, element, true);
        }
    }
    /**
     * Removes the given elements from this list viewer.
     *