Program: 52750
Project: 52750
Buggy source:
@Override protected void createBottomTable(Composite parent){
  Composite container=new Composite(parent,SWT.NONE);
  TableColumnLayout layout=new TableColumnLayout();
  container.setLayout(layout);
  transactions=new TableViewer(container,SWT.FULL_SELECTION);
  ShowHideColumnHelper support=new ShowHideColumnHelper(DividendsPerformanceView.class.getSimpleName() + "String_Node_Str",getPreferenceStore(),transactions,layout);
  Column column=new Column(Messages.ColumnDate,SWT.None,80);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object e){
      Transaction t=(Transaction)e;
      return Values.Date.format(t.getDate());
    }
  }
);
  column.setSorter(ColumnViewerSorter.create(Transaction.class,"String_Node_Str"),SWT.DOWN);
  support.addColumn(column);
  column=new Column(Messages.ColumnTransactionType,SWT.None,80);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object t){
      if (t instanceof PortfolioTransaction)       return ((PortfolioTransaction)t).getType().toString();
 else       if (t instanceof AccountTransaction)       return ((AccountTransaction)t).getType().toString();
 else       if (t instanceof DividendTransaction)       return Messages.LabelDividends;
 else       return Messages.LabelQuote;
    }
  }
);
  support.addColumn(column);
  column=new Column(Messages.ColumnShares,SWT.None,80);
  column.setLabelProvider(new SharesLabelProvider(){
    @Override public Long getValue(    Object t){
      if (t instanceof PortfolioTransaction)       return ((PortfolioTransaction)t).getShares();
 else       if (t instanceof DividendInitialTransaction)       return ((DividendInitialTransaction)t).getPosition().getShares();
 else       if (t instanceof DividendFinalTransaction)       return ((DividendFinalTransaction)t).getPosition().getShares();
 else       if (t instanceof DividendTransaction)       return ((DividendTransaction)t).getShares() != 0L ? ((DividendTransaction)t).getShares() : null;
 else       return null;
    }
  }
);
  support.addColumn(column);
  column=new Column(Messages.ColumnDividendPayment,SWT.RIGHT,80);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object t){
      if (t instanceof DividendTransaction)       return Values.Amount.format(((DividendTransaction)t).getAmount());
 else       return null;
    }
  }
);
  support.addColumn(column);
  column=new Column(Messages.ColumnDividendPerShare,SWT.RIGHT,80);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object t){
      if (t instanceof DividendTransaction)       return Values.AmountFraction.formatNonZero(((DividendTransaction)t).getDividendPerShare());
 else       return null;
    }
  }
);
  support.addColumn(column);
  column=new Column(Messages.ColumnPersonalDividendYield,SWT.RIGHT,80);
  column.setDescription(Messages.ColumnPersonalDividendYield_Description);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object t){
      if (t instanceof DividendTransaction)       return Values.Percent2.formatNonZero(((DividendTransaction)t).getPersonalDividendYield());
 else       return null;
    }
  }
);
  support.addColumn(column);
  column=new Column(Messages.ColumnAmount,SWT.RIGHT,80);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object t){
      if (t instanceof PortfolioTransaction)       return Values.Amount.format(((PortfolioTransaction)t).getAmount());
 else       if (t instanceof DividendInitialTransaction)       return Values.Amount.format(((DividendInitialTransaction)t).getAmount());
 else       if (t instanceof DividendFinalTransaction)       return Values.Amount.format(((DividendFinalTransaction)t).getAmount());
 else       return null;
    }
  }
);
  support.addColumn(column);
  column=new Column(Messages.ColumnAccount,SWT.None,120);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object t){
      if (t instanceof PortfolioTransaction) {
        PortfolioTransaction p=(PortfolioTransaction)t;
        return p.getCrossEntry() != null ? p.getCrossEntry().getCrossEntity(p).toString() : null;
      }
 else       if (t instanceof DividendTransaction) {
        return ((DividendTransaction)t).getAccount().getName();
      }
 else {
        return null;
      }
    }
  }
);
  support.addColumn(column);
  column=new Column("String_Node_Str",Messages.ColumnNote,SWT.LEFT,22);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object r){
      return ((Transaction)r).getNote();
    }
    @Override public Image getImage(    Object r){
      String note=((Transaction)r).getNote();
      return note != null && note.length() > 0 ? PortfolioPlugin.image(PortfolioPlugin.IMG_NOTE) : null;
    }
  }
);
  column.setSorter(ColumnViewerSorter.create(Transaction.class,"String_Node_Str"));
  support.addColumn(column);
  support.createColumns();
  transactions.getTable().setHeaderVisible(true);
  transactions.getTable().setLinesVisible(true);
  transactions.setContentProvider(new SimpleListContentProvider());
}

Fixed version (ground truth):
@Override protected void createBottomTable(Composite parent){
  Composite container=new Composite(parent,SWT.NONE);
  TableColumnLayout layout=new TableColumnLayout();
  container.setLayout(layout);
  transactions=new TableViewer(container,SWT.FULL_SELECTION);
  ShowHideColumnHelper support=new ShowHideColumnHelper(DividendsPerformanceView.class.getSimpleName() + "String_Node_Str",getPreferenceStore(),transactions,layout);
  Column column=new Column(Messages.ColumnDate,SWT.None,80);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object e){
      Transaction t=(Transaction)e;
      return Values.Date.format(t.getDate());
    }
  }
);
  column.setSorter(ColumnViewerSorter.create(Transaction.class,"String_Node_Str"),SWT.DOWN);
  support.addColumn(column);
  column=new Column(Messages.ColumnTransactionType,SWT.None,80);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object t){
      if (t instanceof PortfolioTransaction)       return ((PortfolioTransaction)t).getType().toString();
 else       if (t instanceof AccountTransaction)       return ((AccountTransaction)t).getType().toString();
 else       if (t instanceof DividendTransaction)       return Messages.LabelDividends;
 else       return Messages.LabelQuote;
    }
  }
);
  support.addColumn(column);
  column=new Column(Messages.ColumnShares,SWT.None,80);
  column.setLabelProvider(new SharesLabelProvider(){
    @Override public Long getValue(    Object t){
      if (t instanceof PortfolioTransaction)       return ((PortfolioTransaction)t).getShares();
 else       if (t instanceof DividendInitialTransaction)       return ((DividendInitialTransaction)t).getPosition().getShares();
 else       if (t instanceof DividendFinalTransaction)       return ((DividendFinalTransaction)t).getPosition().getShares();
 else       if (t instanceof DividendTransaction)       return ((DividendTransaction)t).getShares() != 0L ? ((DividendTransaction)t).getShares() : null;
 else       return null;
    }
  }
);
  support.addColumn(column);
  column=new Column(Messages.ColumnDividendPayment,SWT.RIGHT,80);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object t){
      if (t instanceof DividendTransaction)       return Values.Amount.format(((DividendTransaction)t).getAmount());
 else       return null;
    }
  }
);
  support.addColumn(column);
  column=new Column(Messages.ColumnDividendPerShare,SWT.RIGHT,80);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object t){
      if (t instanceof DividendTransaction)       return Values.AmountFraction.formatNonZero(((DividendTransaction)t).getDividendPerShare());
 else       return null;
    }
  }
);
  support.addColumn(column);
  column=new Column(Messages.ColumnPersonalDividendYield,SWT.RIGHT,80);
  column.setDescription(Messages.ColumnPersonalDividendYield_Description);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object t){
      if (t instanceof DividendTransaction)       return Values.Percent2.formatNonZero(((DividendTransaction)t).getPersonalDividendYield());
 else       return null;
    }
  }
);
  support.addColumn(column);
  column=new Column(Messages.ColumnAmount,SWT.RIGHT,80);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object t){
      if (t instanceof PortfolioTransaction)       return Values.Amount.format(((PortfolioTransaction)t).getAmount());
 else       if (t instanceof DividendInitialTransaction)       return Values.Amount.format(((DividendInitialTransaction)t).getAmount());
 else       if (t instanceof DividendFinalTransaction)       return Values.Amount.format(((DividendFinalTransaction)t).getAmount());
 else       return null;
    }
  }
);
  support.addColumn(column);
  column=new Column(Messages.ColumnAccount,SWT.None,120);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object t){
      if (t instanceof PortfolioTransaction) {
        PortfolioTransaction p=(PortfolioTransaction)t;
        return p.getCrossEntry() != null ? p.getCrossEntry().getCrossEntity(p).toString() : null;
      }
 else       if (t instanceof DividendTransaction) {
        return ((DividendTransaction)t).getAccount().getName();
      }
 else {
        return null;
      }
    }
  }
);
  support.addColumn(column);
  column=new Column("String_Node_Str",Messages.ColumnNote,SWT.LEFT,22);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object r){
      return ((Transaction)r).getNote();
    }
    @Override public Image getImage(    Object r){
      String note=((Transaction)r).getNote();
      return note != null && note.length() > 0 ? PortfolioPlugin.image(PortfolioPlugin.IMG_NOTE) : null;
    }
  }
);
  column.setSorter(ColumnViewerSorter.create(Transaction.class,"String_Node_Str"));
  support.addColumn(column);
  support.createColumns();
  transactions.getTable().setHeaderVisible(true);
  transactions.getTable().setLinesVisible(true);
  transactions.setContentProvider(new SimpleListContentProvider());
  ViewerHelper.pack(transactions);
}