Buggy code:
private Button selectClean ; private Button invertSelection ; private boolean showAllPersp = false ; private int sortColumn ; private List elements = new ArrayList ( ) ; private HashMap imageCache = new HashMap ( 11 ) ; private HashMap disabledImageCache = new HashMap ( 11 ) ; private boolean reverse = false ; private Collator collator = Collator . getInstance ( ) ; private Rectangle bounds ; private int [ ] columnsWidth ; private static final String SORT = "sort" ; private static final String HISTORY = "history" ; private static final String ALLPERSP = "allPersp" ; private static final String BOUNDS = "bounds" ; private static final String COLUMNS = "columns" ; private SelectionListener headerListener = new SelectionAdapter ( ) { public void widgetSelected ( SelectionEvent e ) { } } ; public WorkbenchEditorsDialog ( WorkbenchWindow window ) { } protected void configureShell ( Shell newShell ) { } protected void initializeBounds ( ) { } protected Control createDialogArea ( Composite parent ) { Composite dialogArea = ( ( Composite ) ( super . createDialogArea ( parent ) ) ) ; Label l = new Label ( dialogArea , SWT . NONE ) ; l . setText ( WorkbenchMessages . getString ( "WorkbenchEditorsDialog.label" ) ) ; GridData data = new GridData ( GridData . FILL_HORIZONTAL ) ; l . setLayoutData ( data ) ; editorsTable = new Table ( dialogArea , ( ( ( ( ( SWT . MULTI ) | ( SWT . BORDER ) ) | ( SWT . H_SCROLL ) ) | ( SWT . V_SCROLL ) ) | ( SWT . FULL_SELECTION ) ) ) ; editorsTable . setLinesVisible ( true ) ; editorsTable . setHeaderVisible ( true ) ; final GridData tableData = new GridData ( GridData . FILL_BOTH ) ; tableData . heightHint = 16 * ( editorsTable . getItemHeight ( ) ) ; tableData . widthHint = ( ( int ) ( 2.5 * ( tableData . heightHint ) ) ) ; editorsTable . setLayoutData ( tableData ) ; editorsTable . setLayout ( new Layout ( ) { protected Point computeSize ( Composite composite , int wHint , int hHint , boolean flushCache ) { return new Point ( tableData . widthHint , tableData . heightHint ) ; } protected void layout ( Composite composite , boolean flushCache ) { TableColumn [ ] c = editorsTable . getColumns ( ) ; if ( ( columnsWidth ) == null ) { int w = editorsTable . getClientArea ( ) . width ; c [ 0 ] . setWidth ( ( ( w * 1 ) // 3 ) ) ; c [ 1 ] . setWidth ( ( w - ( c [ 0 ] . getWidth ( ) ) ) ) ; } else { c [ 0 ] . setWidth ( columnsWidth [ 0 ] ) ; c [ 1 ] . setWidth ( columnsWidth [ 1 ] ) ; } editorsTable . setLayout ( null ) ; } } ) ; TableColumn tc = new TableColumn ( editorsTable , SWT . NONE ) ; tc . setResizable ( true ) ; tc . setText ( WorkbenchMessages . getString ( "WorkbenchEditorsDialog.name" ) ) ; tc . addSelectionListener ( headerListener ) ; tc = new TableColumn ( editorsTable , SWT . NONE ) ; tc . setResizable ( true ) ; tc . setText ( WorkbenchMessages . getString ( "WorkbenchEditorsDialog.path" ) ) ; tc . addSelectionListener ( headerListener ) ; Composite selectionButtons = new Composite ( dialogArea , SWT . NULL ) ; GridLayout layout = new GridLayout ( ) ; layout . numColumns = 4 ; selectionButtons . setLayout ( layout ) ; closeSelected = new Button ( selectionButtons , SWT . PUSH ) ; closeSelected . setText ( WorkbenchMessages . getString ( "WorkbenchEditorsDialog.closeSelected" ) ) ; closeSelected . addSelectionListener ( new SelectionAdapter ( ) { public void widgetSelected ( SelectionEvent e ) { closeItems ( editorsTable . getSelection ( ) ) ; } } ) ; saveSelected = new Button ( selectionButtons , SWT . PUSH ) ; saveSelected . setText ( WorkbenchMessages . getString ( "WorkbenchEditorsDialog.saveSelected" ) ) ; saveSelected . addSelectionListener ( new SelectionAdapter ( ) { public void widgetSelected ( SelectionEvent e ) { <START_BUG> saveItems ( editorsTable . getItems ( ) , null ) ; <END_BUG> } } ) ; selectClean = new Button ( selectionButtons , SWT . PUSH ) ; selectClean . setText ( WorkbenchMessages . getString ( "WorkbenchEditorsDialog.selectClean" ) ) ; selectClean . addSelectionListener ( new SelectionAdapter ( ) { public void widgetSelected ( SelectionEvent e ) { editorsTable . setSelection ( selectClean ( editorsTable . getItems ( ) ) ) ; updateButtons ( ) ; } } ) ; invertSelection = new Button ( selectionButtons , SWT . PUSH ) ; invertSelection . setText ( WorkbenchMessages . getString ( "WorkbenchEditorsDialog.invertSelection" ) ) ; invertSelection . addSelectionListener ( new SelectionAdapter ( ) { public void widgetSelected ( SelectionEvent e ) { editorsTable . setSelection ( invertedSelection ( editorsTable . getItems ( ) , editorsTable . getSelection ( ) ) ) ; updateButtons ( ) ; } } ) ; final Button showAllPerspButton = new Button ( dialogArea , SWT . CHECK ) ; showAllPerspButton . setText ( WorkbenchMessages . getString ( "WorkbenchEditorsDialog.showAllPersp" ) ) ; showAllPerspButton . setSelection ( showAllPersp ) ; showAllPerspButton . addSelectionListener ( new SelectionAdapter ( ) { public void widgetSelected ( SelectionEvent e ) { showAllPersp = showAllPerspButton . getSelection ( ) ; updateItems ( ) ; } } ) ; updateItems ( ) ; updateButtons ( ) ; editorsTable . addSelectionListener ( new SelectionAdapter ( ) { public void widgetSelected ( SelectionEvent e ) { updateButtons ( ) ; } public void widgetDefaultSelected ( SelectionEvent e ) { okPressed ( ) ; } } ) ; editorsTable . addDisposeListener ( new DisposeListener ( ) { public void widgetDisposed ( DisposeEvent e ) { for ( Iterator images = imageCache . values ( ) . iterator ( ) ;

Fix:
saveItems ( editorsTable . getSelection ( ) , null ) ;