I see TableViewer didn't expect to refresh just one cell in a row.
AbstractTableViewer
protected void doUpdateItem(Widget widget, Object element, boolean fullMap)
you need to override the above method. Current implementation refreshes the entire row ( basically invokes LabelProvider
on each cell)
you can follow the same implementation but invoke update on specific ViewerCell