Program: 139615
Project: 139615
Buggy source:
private TableViewer createSectionPart(Composite parentComp,final List<Column> columnList,String title,String hyperlinkText){
  Section columnSetElementSection=masterPage.createSection(form,parentComp,title,true,null);
  Composite sectionComp=toolkit.createComposite(columnSetElementSection);
  sectionComp.setLayout(new GridLayout());
  Hyperlink selectColumnBtn=toolkit.createHyperlink(sectionComp,hyperlinkText,SWT.NONE);
  GridDataFactory.fillDefaults().align(SWT.BEGINNING,SWT.BEGINNING).applyTo(selectColumnBtn);
  Composite columsComp=toolkit.createComposite(sectionComp,SWT.NULL);
  GridDataFactory.fillDefaults().align(SWT.FILL,SWT.BEGINNING).grab(true,true).applyTo(columsComp);
  columsComp.setLayout(new GridLayout());
  final TableViewer columnsElementViewer=createTreeViewer(columnList,columsComp);
  tableViewerPosStack.add(columnsElementViewer);
  TableViewerDNDDecorate dndDecorate=new TableViewerDNDDecorate();
  dndDecorate.installDND(columnsElementViewer,true,TableViewerDNDDecorate.COLUMN_VALIDATETYPE);
  Composite buttonsComp=toolkit.createComposite(columsComp,SWT.NULL);
  buttonsComp.setLayout(new GridLayout(4,true));
  buttonsComp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
  final Button delButton=new Button(buttonsComp,SWT.NULL);
  delButton.setImage(ImageLib.getImage(ImageLib.DELETE_ACTION));
  GridData buttonGridData=new GridData(GridData.FILL_BOTH);
  delButton.setLayoutData(buttonGridData);
  final Button moveUpButton=new Button(buttonsComp,SWT.NULL);
  moveUpButton.setText(DefaultMessagesImpl.getString("String_Node_Str"));
  moveUpButton.setLayoutData(buttonGridData);
  final Button moveDownButton=new Button(buttonsComp,SWT.NULL);
  moveDownButton.setText(DefaultMessagesImpl.getString("String_Node_Str"));
  moveDownButton.setLayoutData(buttonGridData);
  Button sortButton=new Button(buttonsComp,SWT.NULL);
  sortButton.setText(DefaultMessagesImpl.getString("String_Node_Str"));
  sortButton.setLayoutData(buttonGridData);
  final Button[] buttons=new Button[]{delButton,moveUpButton,moveDownButton};
  columnsElementViewer.addSelectionChangedListener(new ISelectionChangedListener(){
    public void selectionChanged(    SelectionChangedEvent event){
      enabledButtons(buttons,event.getSelection() != null);
    }
  }
);
  createTableViewerMenu(columnsElementViewer,columnList,buttons);
  delButton.addSelectionListener(new SelectionAdapter(){
    public void widgetSelected(    SelectionEvent e){
      columnList.remove(((IStructuredSelection)columnsElementViewer.getSelection()).getFirstElement());
      columnsElementViewer.setInput(columnList);
      enabledButtons(buttons,false);
      masterPage.setDirty(true);
    }
  }
);
  moveUpButton.addSelectionListener(new SelectionAdapter(){
    public void widgetSelected(    SelectionEvent e){
      moveElement(columnList,columnsElementViewer,false);
    }
  }
);
  moveDownButton.addSelectionListener(new SelectionAdapter(){
    public void widgetSelected(    SelectionEvent e){
      moveElement(columnList,columnsElementViewer,true);
    }
  }
);
  sortButton.addSelectionListener(new SelectionAdapter(){
    public void widgetSelected(    SelectionEvent e){
      sortElement(columnList,columnsElementViewer);
    }
  }
);
  this.enabledButtons(new Button[]{delButton,moveUpButton,moveDownButton},false);
  final List<Column> columnsOfSectionPart=columnList;
  selectColumnBtn.addHyperlinkListener(new HyperlinkAdapter(){
    public void linkActivated(    HyperlinkEvent e){
      openColumnsSelectionDialog(columnsElementViewer,columnsOfSectionPart);
      enabledButtons(buttons,false);
    }
  }
);
  columnSetElementSection.setClient(sectionComp);
  return columnsElementViewer;
}

Fixed version (ground truth):
private TableViewer createSectionPart(Composite parentComp,final List<Column> columnList,String title,String hyperlinkText){
  Section columnSetElementSection=masterPage.createSection(form,parentComp,title,true,null);
  Composite sectionComp=toolkit.createComposite(columnSetElementSection);
  sectionComp.setLayout(new GridLayout());
  Hyperlink selectColumnBtn=toolkit.createHyperlink(sectionComp,hyperlinkText,SWT.NONE);
  GridDataFactory.fillDefaults().align(SWT.BEGINNING,SWT.BEGINNING).applyTo(selectColumnBtn);
  Composite columsComp=toolkit.createComposite(sectionComp,SWT.NULL);
  GridDataFactory.fillDefaults().align(SWT.FILL,SWT.BEGINNING).grab(true,true).applyTo(columsComp);
  columsComp.setLayout(new GridLayout());
  final TableViewer columnsElementViewer=createTreeViewer(columnList,columsComp);
  tableViewerPosStack.add(columnsElementViewer);
  TableViewerDNDDecorate dndDecorate=new TableViewerDNDDecorate(allowColumnDupcation);
  dndDecorate.installDND(columnsElementViewer,true,TableViewerDNDDecorate.COLUMN_VALIDATETYPE);
  Composite buttonsComp=toolkit.createComposite(columsComp,SWT.NULL);
  buttonsComp.setLayout(new GridLayout(4,true));
  buttonsComp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
  final Button delButton=new Button(buttonsComp,SWT.NULL);
  delButton.setImage(ImageLib.getImage(ImageLib.DELETE_ACTION));
  GridData buttonGridData=new GridData(GridData.FILL_BOTH);
  delButton.setLayoutData(buttonGridData);
  final Button moveUpButton=new Button(buttonsComp,SWT.NULL);
  moveUpButton.setText(DefaultMessagesImpl.getString("String_Node_Str"));
  moveUpButton.setLayoutData(buttonGridData);
  final Button moveDownButton=new Button(buttonsComp,SWT.NULL);
  moveDownButton.setText(DefaultMessagesImpl.getString("String_Node_Str"));
  moveDownButton.setLayoutData(buttonGridData);
  Button sortButton=new Button(buttonsComp,SWT.NULL);
  sortButton.setText(DefaultMessagesImpl.getString("String_Node_Str"));
  sortButton.setLayoutData(buttonGridData);
  final Button[] buttons=new Button[]{delButton,moveUpButton,moveDownButton};
  columnsElementViewer.addSelectionChangedListener(new ISelectionChangedListener(){
    public void selectionChanged(    SelectionChangedEvent event){
      enabledButtons(buttons,event.getSelection() != null);
    }
  }
);
  createTableViewerMenu(columnsElementViewer,columnList,buttons);
  delButton.addSelectionListener(new SelectionAdapter(){
    public void widgetSelected(    SelectionEvent e){
      columnList.remove(((IStructuredSelection)columnsElementViewer.getSelection()).getFirstElement());
      columnsElementViewer.setInput(columnList);
      enabledButtons(buttons,false);
      masterPage.setDirty(true);
    }
  }
);
  moveUpButton.addSelectionListener(new SelectionAdapter(){
    public void widgetSelected(    SelectionEvent e){
      moveElement(columnList,columnsElementViewer,false);
    }
  }
);
  moveDownButton.addSelectionListener(new SelectionAdapter(){
    public void widgetSelected(    SelectionEvent e){
      moveElement(columnList,columnsElementViewer,true);
    }
  }
);
  sortButton.addSelectionListener(new SelectionAdapter(){
    public void widgetSelected(    SelectionEvent e){
      sortElement(columnList,columnsElementViewer);
    }
  }
);
  this.enabledButtons(new Button[]{delButton,moveUpButton,moveDownButton},false);
  final List<Column> columnsOfSectionPart=columnList;
  selectColumnBtn.addHyperlinkListener(new HyperlinkAdapter(){
    public void linkActivated(    HyperlinkEvent e){
      openColumnsSelectionDialog(columnsElementViewer,columnsOfSectionPart);
      enabledButtons(buttons,false);
    }
  }
);
  columnSetElementSection.setClient(sectionComp);
  return columnsElementViewer;
}