Bug 121797 [Viewers] internalRefresh(Object)
AbstractListViewer.internalRefresh(Object) does not wrap calls to setRedraw on its org.eclipse.swt.widgets.List within a try-finally block. There are many methods between the two calls to setRedraw that subclasses could throw Exceptions on which could cause setRedraw(true) not to be called. The most likely is the call to the LabelProvider through AbstractLabelViewer.getLabelProviderText(ILabelProvider, Object)
bundles/org.eclipse.jface/src/org/eclipse/jface/viewers/AbstractListViewer.java
/**
     * Returns the index of the given element in listMap, or -1 if the element cannot be found.
     * As of 3.3, uses the element comparer if available.
     * 
     * @param element
     * @return the index
     */
    int getElementIndex(Object element) {
		IElementComparer comparer = getComparer();
		if (comparer == null) {
			return listMap.indexOf(element);
		}
		int size = listMap.size();
		for (int i = 0; i < size; i++) {
			if (comparer.equals(element, listMap.get(i)))
				return i;
		}
		return -1;
	}
    /**
	 * @param element
	 * @return true if listMap contains the given element
	 * 
	 * @since 3.3
	 */
	private boolean listMapContains(Object element) {
		return getElementIndex(element) != -1;
	}
}