Buggy code:
public class SavePerspectiveDialog extends Dialog implements ModifyListener , ISelectionChangedListener { private Text text ; private TableViewer list ; private Button okButton ; private PerspectiveRegistry perspReg ; private String perspName ; private IPerspectiveDescriptor persp ; private IPerspectiveDescriptor initialSelection ; private boolean ignoreSelection = false ; private static final int LIST_WIDTH = 40 ; private static final int TEXT_WIDTH = 40 ; private static final int LIST_HEIGHT = 14 ; public SavePerspectiveDialog ( Shell parentShell , PerspectiveRegistry perspReg ) { } protected void configureShell ( Shell shell ) { } protected void createButtonsForButtonBar ( Composite parent ) { } protected Control createDialogArea ( Composite parent ) { Font font = parent . getFont ( ) ; Composite composite = ( ( Composite ) ( super . createDialogArea ( parent ) ) ) ; Label descLabel = new Label ( composite , SWT . WRAP ) ; descLabel . setText ( WorkbenchMessages . getString ( "SavePerspectiveDialog.description" ) ) ; descLabel . setFont ( parent . getFont ( ) ) ; Label label = new Label ( composite , SWT . NONE ) ; GridData data = new GridData ( ) ; data . heightHint = 8 ; label . setLayoutData ( data ) ; Composite nameGroup = new Composite ( composite , SWT . NONE ) ; nameGroup . setLayoutData ( new GridData ( GridData . FILL_HORIZONTAL ) ) ; GridLayout layout = new GridLayout ( ) ; layout . numColumns = 2 ; layout . marginWidth = layout . marginHeight = 0 ; nameGroup . setLayout ( layout ) ; label = new Label ( nameGroup , SWT . NONE ) ; label . setText ( WorkbenchMessages . getString ( "SavePerspective.name" ) ) ; label . setFont ( font ) ; text = new Text ( nameGroup , SWT . BORDER ) ; text . setFocus ( ) ; data = new GridData ( GridData . FILL_HORIZONTAL ) ; data . widthHint = convertWidthInCharsToPixels ( SavePerspectiveDialog . TEXT_WIDTH ) ; text . setLayoutData ( data ) ; text . setFont ( font ) ; text . addModifyListener ( this ) ; label = new Label ( composite , SWT . NONE ) ; data = new GridData ( ) ; data . heightHint = 5 ; label . setLayoutData ( data ) ; label = new Label ( composite , SWT . NONE ) ; label . setText ( WorkbenchMessages . getString ( "SavePerspective.existing" ) ) ; label . setFont ( font ) ; list = new TableViewer ( composite , ( ( ( SWT . H_SCROLL ) | ( SWT . V_SCROLL ) ) | ( SWT . BORDER ) ) ) ; list . setLabelProvider ( new PerspLabelProvider ( ) ) ; list . setContentProvider ( new PerspContentProvider ( ) ) ; <START_BUG> list . setSorter ( new ViewerSorter ( ) { } ) ; <END_BUG> list . setInput ( perspReg ) ; list . addSelectionChangedListener ( this ) ; list . getTable ( ) . setFont ( font ) ; Control ctrl = list . getControl ( ) ; GridData spec = new GridData ( GridData . FILL_BOTH ) ; spec . widthHint = convertWidthInCharsToPixels ( SavePerspectiveDialog . LIST_WIDTH ) ; spec . heightHint = convertHeightInCharsToPixels ( SavePerspectiveDialog . LIST_HEIGHT ) ; ctrl . setLayoutData ( spec ) ; if ( ( initialSelection ) != null ) { StructuredSelection sel = new StructuredSelection ( initialSelection ) ; list . setSelection ( sel , true ) ; } text . selectAll ( ) ; return composite ; } public IPerspectiveDescriptor getPersp ( ) { } public String getPerspName ( ) { } public void modifyText ( ModifyEvent e ) { } protected void okPressed ( ) { } public void selectionChanged ( SelectionChangedEvent event ) { } public void setInitialSelection ( IPerspectiveDescriptor selectedElement ) { } private void updateButtons ( ) { } }

Fix:
list . setSorter ( new ViewerSorter ( ) ) ;