Program: 128150
Project: 128150
Buggy source:
private void addInstallButtons(TableViewerCreatorColumn installColumn,TableViewerCreatorColumn urlColumn){
  installButtons.clear();
  tableViewerCreator.getTableViewer().getControl().setRedraw(false);
  final Table table=tableViewerCreator.getTable();
  for (  final TableItem item : table.getItems()) {
    TableEditor editor=new TableEditor(table);
    Control control=null;
    Object obj=item.getData();
    if (obj instanceof ModuleToInstall) {
      final ModuleToInstall data=(ModuleToInstall)obj;
      if (data.getUrl_download() != null) {
        final Button button=new Button(table,SWT.FLAT);
        control=button;
        installButtons.add(button);
        button.setText(Messages.getString("String_Node_Str"));
        button.setData(item);
        button.addSelectionListener(new SelectionAdapter(){
          @Override public void widgetSelected(          SelectionEvent e){
            button.setEnabled(false);
            table.select(table.indexOf(item));
            List<ModuleToInstall> datalist=new ArrayList<ModuleToInstall>();
            datalist.add(data);
            final DownloadModuleJob job=new DownloadModuleJob(datalist);
            job.addJobChangeListener(new JobChangeAdapter(){
              @Override public void done(              IJobChangeEvent event){
                Display.getDefault().asyncExec(new Runnable(){
                  @Override public void run(){
                    String message="String_Node_Str";
                    if (!job.installedModules.isEmpty()) {
                      message=Messages.getString("String_Node_Str",data.getName());
                    }
 else {
                      message=Messages.getString("String_Node_Str",data.getName());
                      ;
                    }
                    MessageDialog.openInformation(getShell(),Messages.getString("String_Node_Str"),message);
                  }
                }
);
              }
            }
);
            job.setUser(true);
            job.setPriority(Job.INTERACTIVE);
            job.schedule();
            int n=0;
            for (            Button button : installButtons) {
              if (!button.isEnabled()) {
                n++;
              }
            }
            if (n == installButtons.size()) {
              close();
            }
          }
        }
);
      }
 else {
        Composite composite=new Composite(table,SWT.NONE);
        composite.setBackground(color);
        control=composite;
        GridLayout layout=new GridLayout();
        layout.marginHeight=0;
        layout.verticalSpacing=1;
        composite.setLayout(layout);
        GridData gData=new GridData(GridData.FILL_HORIZONTAL);
        gData.horizontalAlignment=SWT.CENTER;
        gData.verticalAlignment=SWT.CENTER;
        final Link openLink=new Link(composite,SWT.NONE);
        openLink.setBackground(color);
        openLink.setLayoutData(gData);
        openLink.setText("String_Node_Str" + Messages.getString("String_Node_Str") + "String_Node_Str");
        openLink.addSelectionListener(new SelectionAdapter(){
          @Override public void widgetSelected(          final SelectionEvent e){
            Program.launch(data.getUrl_description());
          }
        }
);
      }
      editor.grabHorizontal=true;
      editor.minimumHeight=20;
      editor.setEditor(control,item,tableViewerCreator.getColumns().indexOf(installColumn));
      editor.layout();
      editor=new TableEditor(table);
      Composite composite=new Composite(table,SWT.NONE);
      composite.setBackground(color);
      GridLayout layout=new GridLayout();
      layout.marginHeight=0;
      layout.marginRight=0;
      layout.verticalSpacing=1;
      composite.setLayout(layout);
      GridData gData=new GridData(GridData.FILL_HORIZONTAL);
      final Link openLink=new Link(composite,SWT.NONE);
      openLink.setLayoutData(gData);
      openLink.setBackground(color);
      openLink.setText("String_Node_Str" + data.getUrl_description() + "String_Node_Str");
      openLink.addSelectionListener(new SelectionAdapter(){
        @Override public void widgetSelected(        final SelectionEvent e){
          Program.launch(data.getUrl_description());
        }
      }
);
      editor.grabHorizontal=true;
      editor.minimumHeight=20;
      editor.setEditor(composite,item,tableViewerCreator.getColumns().indexOf(urlColumn));
      editor.layout();
    }
  }
  tableViewerCreator.getTableViewer().getTable().layout();
  tableViewerCreator.getTableViewer().refresh(true);
  tableViewerCreator.getTableViewer().getControl().setRedraw(true);
}

Fixed version (ground truth):
private void addInstallButtons(TableViewerCreatorColumn installColumn,TableViewerCreatorColumn urlColumn){
  installButtons.clear();
  tableViewerCreator.getTableViewer().getControl().setRedraw(false);
  final Table table=tableViewerCreator.getTable();
  for (  final TableItem item : table.getItems()) {
    TableEditor editor=new TableEditor(table);
    Control control=null;
    Object obj=item.getData();
    if (obj instanceof ModuleToInstall) {
      final ModuleToInstall data=(ModuleToInstall)obj;
      if (data.getUrl_download() != null) {
        final Button button=new Button(table,SWT.FLAT);
        control=button;
        installButtons.add(button);
        button.setText(Messages.getString("String_Node_Str"));
        button.setData(item);
        button.addSelectionListener(new SelectionAdapter(){
          @Override public void widgetSelected(          SelectionEvent e){
            button.setEnabled(false);
            table.select(table.indexOf(item));
            List<ModuleToInstall> datalist=new ArrayList<ModuleToInstall>();
            datalist.add(data);
            final DownloadModuleJob job=new DownloadModuleJob(datalist);
            job.addJobChangeListener(new JobChangeAdapter(){
              @Override public void done(              IJobChangeEvent event){
                Display.getDefault().asyncExec(new Runnable(){
                  @Override public void run(){
                    String message="String_Node_Str";
                    if (!job.installedModules.isEmpty()) {
                      message=Messages.getString("String_Node_Str",data.getName());
                      emptyLibs();
                    }
 else {
                      message=Messages.getString("String_Node_Str",data.getName());
                      ;
                    }
                    MessageDialog.openInformation(getShell(),Messages.getString("String_Node_Str"),message);
                  }
                }
);
              }
            }
);
            job.setUser(true);
            job.setPriority(Job.INTERACTIVE);
            job.schedule();
            int n=0;
            for (            Button button : installButtons) {
              if (!button.isEnabled()) {
                n++;
              }
            }
            if (n == installButtons.size()) {
              close();
            }
          }
        }
);
      }
 else {
        Composite composite=new Composite(table,SWT.NONE);
        composite.setBackground(color);
        control=composite;
        GridLayout layout=new GridLayout();
        layout.marginHeight=0;
        layout.verticalSpacing=1;
        composite.setLayout(layout);
        GridData gData=new GridData(GridData.FILL_HORIZONTAL);
        gData.horizontalAlignment=SWT.CENTER;
        gData.verticalAlignment=SWT.CENTER;
        final Link openLink=new Link(composite,SWT.NONE);
        openLink.setBackground(color);
        openLink.setLayoutData(gData);
        openLink.setText("String_Node_Str" + Messages.getString("String_Node_Str") + "String_Node_Str");
        openLink.addSelectionListener(new SelectionAdapter(){
          @Override public void widgetSelected(          final SelectionEvent e){
            Program.launch(data.getUrl_description());
          }
        }
);
      }
      editor.grabHorizontal=true;
      editor.minimumHeight=20;
      editor.setEditor(control,item,tableViewerCreator.getColumns().indexOf(installColumn));
      editor.layout();
      editor=new TableEditor(table);
      Composite composite=new Composite(table,SWT.NONE);
      composite.setBackground(color);
      GridLayout layout=new GridLayout();
      layout.marginHeight=0;
      layout.marginRight=0;
      layout.verticalSpacing=1;
      composite.setLayout(layout);
      GridData gData=new GridData(GridData.FILL_HORIZONTAL);
      final Link openLink=new Link(composite,SWT.NONE);
      openLink.setLayoutData(gData);
      openLink.setBackground(color);
      openLink.setText("String_Node_Str" + data.getUrl_description() + "String_Node_Str");
      openLink.addSelectionListener(new SelectionAdapter(){
        @Override public void widgetSelected(        final SelectionEvent e){
          Program.launch(data.getUrl_description());
        }
      }
);
      editor.grabHorizontal=true;
      editor.minimumHeight=20;
      editor.setEditor(composite,item,tableViewerCreator.getColumns().indexOf(urlColumn));
      editor.layout();
    }
  }
  tableViewerCreator.getTableViewer().getTable().layout();
  tableViewerCreator.getTableViewer().refresh(true);
  tableViewerCreator.getTableViewer().getControl().setRedraw(true);
}