Buggy code:
public class ProgressRegion implements IWindowTrim { ProgressCanvasViewer viewer ; ProgressAnimationItem animationItem ; Composite region ; WorkbenchWindow workbenchWindow ; private int fWidthHint = SWT . DEFAULT ; private int fHeightHint = SWT . DEFAULT ; private int side = SWT . BOTTOM ; private boolean forceHorizontal ; public ProgressRegion ( ) { } public Control createContents ( Composite parent , WorkbenchWindow window ) { workbenchWindow = window ; GC gc = new GC ( parent ) ; gc . setAdvanced ( true ) ; forceHorizontal = ! ( gc . getAdvanced ( ) ) ; gc . dispose ( ) ; region = new Composite ( parent , SWT . NONE ) { public Point computeSize ( int wHint , int hHint , boolean changed ) { Point size = super . computeSize ( wHint , hHint , changed ) ; if ( isHorizontal ( side ) ) size . y = TrimUtil . TRIM_DEFAULT_HEIGHT ; else { size . x = TrimUtil . TRIM_DEFAULT_HEIGHT ; } return size ; } } ; GridLayout gl = new GridLayout ( ) ; gl . marginHeight = 0 ; gl . marginWidth = 0 ; if ( isHorizontal ( side ) ) gl . numColumns = 3 ; region . setLayout ( gl ) ; viewer = new ProgressCanvasViewer ( region , SWT . NO_FOCUS , 1 , 36 , ( isHorizontal ( side ) ? SWT . HORIZONTAL : SWT . VERTICAL ) ) ; viewer . setUseHashlookup ( true ) ; Control viewerControl = viewer . getControl ( ) ; GridData gd = new GridData ( SWT . FILL , SWT . FILL , true , true ) ; Point viewerSizeHints = viewer . getSizeHints ( ) ; if ( isHorizontal ( side ) ) { gd . widthHint = viewerSizeHints . x ; gd . heightHint = viewerSizeHints . y ; } else { gd . widthHint = viewerSizeHints . y ; gd . heightHint = viewerSizeHints . x ; } viewerControl . setLayoutData ( gd ) ; int widthPreference = ( AnimationManager . getInstance ( ) . getPreferredWidth ( ) ) + 25 ; animationItem = new ProgressAnimationItem ( this , ( isHorizontal ( side ) ? SWT . HORIZONTAL : SWT . VERTICAL ) ) ; animationItem . createControl ( region ) ; animationItem . setAnimationContainer ( new AnimationItem . IAnimationContainer ( ) { public void animationDone ( ) { if ( viewer . getControl ( ) . isDisposed ( ) ) { return ; } viewer . refresh ( ) ; } public void animationStart ( ) { } } ) ; if ( isHorizontal ( side ) ) { gd = new GridData ( GridData . FILL_VERTICAL ) ; gd . widthHint = widthPreference ; } else { gd = new GridData ( GridData . FILL_HORIZONTAL ) ; gd . heightHint = widthPreference ; } animationItem . getControl ( ) . setLayoutData ( gd ) ; viewerControl . addMouseListener ( new MouseAdapter ( ) { public void mouseDoubleClick ( MouseEvent e ) { processDoubleClick ( ) ; } } ) ; IContentProvider provider = new ProgressViewerContentProvider ( viewer , false , false ) ; viewer . setContentProvider ( provider ) ; viewer . setInput ( provider ) ; viewer . setLabelProvider ( new ProgressViewerLabelProvider ( viewerControl ) ) ; <START_BUG> viewer . setSorter ( ProgressManagerUtil . getProgressViewerSorter ( ) ) ; <END_BUG> return region ; } public AnimationItem getAnimationItem ( ) { } public Control getControl ( ) { } public void processDoubleClick ( ) { } public void dock ( int dropSide ) { } private boolean isHorizontal ( int dropSide ) { } private boolean isVertical ( int dropSide ) { } private void recreate ( ) { } public String getId ( ) { } public String getDisplayName ( ) { } public int getValidSides ( ) { } public boolean isCloseable ( ) { } public void handleClose ( ) { } public int getWidthHint ( ) { } public void setWidthHint ( int w ) { } public int getHeightHint ( ) { } public void setHeightHint ( int h ) { } public boolean isResizeable ( ) { } }

Fix:
viewer . setComparator ( ProgressManagerUtil . getProgressViewerComparator ( ) ) ;