Program: 52760
Project: 52760
Buggy source:
protected Composite createTransactionTable(Composite parent){
  Composite container=new Composite(parent,SWT.NONE);
  TableColumnLayout layout=new TableColumnLayout();
  container.setLayout(layout);
  transactions=new TableViewer(container,SWT.FULL_SELECTION);
  ColumnViewerToolTipSupport.enableFor(transactions,ToolTip.NO_RECREATE);
  ShowHideColumnHelper support=new ShowHideColumnHelper(SecurityListView.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 element){
      return Values.Date.format(((TransactionPair<?>)element).getTransaction().getDate());
    }
  }
);
  column.setSorter(ColumnViewerSorter.create(new Comparator<Object>(){
    @Override public int compare(    Object o1,    Object o2){
      return ((TransactionPair<?>)o1).getTransaction().getDate().compareTo((((TransactionPair<?>)o2).getTransaction().getDate()));
    }
  }
),SWT.UP);
  support.addColumn(column);
  column=new Column(Messages.ColumnTransactionType,SWT.None,80);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object element){
      Transaction t=((TransactionPair<?>)element).getTransaction();
      if (t instanceof PortfolioTransaction)       return ((PortfolioTransaction)t).getType().toString();
 else       if (t instanceof AccountTransaction)       return ((AccountTransaction)t).getType().toString();
 else       return null;
    }
  }
);
  support.addColumn(column);
  column=new Column(Messages.ColumnShares,SWT.RIGHT,80);
  column.setLabelProvider(new SharesLabelProvider(){
    @Override public Long getValue(    Object element){
      Transaction t=((TransactionPair<?>)element).getTransaction();
      if (t instanceof PortfolioTransaction) {
        return ((PortfolioTransaction)t).getShares();
      }
 else       if (t instanceof AccountTransaction) {
        long shares=((AccountTransaction)t).getShares();
        return shares != 0 ? shares : null;
      }
      return null;
    }
    @Override public String getToolTipText(    Object element){
      Long v=getValue(element);
      return v != null ? Values.Share.format(v) : null;
    }
  }
);
  support.addColumn(column);
  column=new Column(Messages.ColumnAmount,SWT.RIGHT,80);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object element){
      Transaction t=((TransactionPair<?>)element).getTransaction();
      return Values.Amount.format(t.getAmount());
    }
  }
);
  column.setSorter(ColumnViewerSorter.create(new Comparator<Object>(){
    @Override public int compare(    Object o1,    Object o2){
      long a1=((TransactionPair<?>)o1).getTransaction().getAmount();
      long a2=((TransactionPair<?>)o2).getTransaction().getAmount();
      return a1 > a2 ? 1 : a1 < a2 ? -1 : 0;
    }
  }
));
  support.addColumn(column);
  column=new Column(Messages.ColumnQuote,SWT.RIGHT,80);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object element){
      Transaction t=((TransactionPair<?>)element).getTransaction();
      if (t instanceof PortfolioTransaction) {
        return Values.Amount.format(((PortfolioTransaction)t).getActualPurchasePrice());
      }
 else       if (t instanceof AccountTransaction) {
        long shares=((AccountTransaction)t).getShares();
        if (shares != 0)         return Values.Amount.format(Math.round(t.getAmount() * Values.Share.divider() / shares));
      }
      return null;
    }
  }
);
  support.addColumn(column);
  column=new Column(Messages.ColumnPortfolio,SWT.NONE,120);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object element){
      TransactionOwner<?> owner=((TransactionPair<?>)element).getOwner();
      if (owner instanceof Portfolio)       return owner.toString();
      return null;
    }
  }
);
  support.addColumn(column);
  column=new Column(Messages.ColumnOffsetAccount,SWT.NONE,120);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object element){
      TransactionPair<?> pair=(TransactionPair<?>)element;
      Transaction t=pair.getTransaction();
      if (t instanceof PortfolioTransaction)       return t.getCrossEntry() != null ? t.getCrossEntry().getCrossEntity(t).toString() : null;
 else       return pair.getOwner().toString();
    }
  }
);
  support.addColumn(column);
  support.createColumns();
  transactions.getTable().setHeaderVisible(true);
  transactions.getTable().setLinesVisible(true);
  transactions.setContentProvider(new SimpleListContentProvider(true));
  return container;
}

Fixed version (ground truth):
protected Composite createTransactionTable(Composite parent){
  Composite container=new Composite(parent,SWT.NONE);
  TableColumnLayout layout=new TableColumnLayout();
  container.setLayout(layout);
  transactions=new TableViewer(container,SWT.FULL_SELECTION);
  ColumnViewerToolTipSupport.enableFor(transactions,ToolTip.NO_RECREATE);
  ShowHideColumnHelper support=new ShowHideColumnHelper(SecurityListView.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 element){
      return Values.Date.format(((TransactionPair<?>)element).getTransaction().getDate());
    }
  }
);
  column.setSorter(ColumnViewerSorter.create(new Comparator<Object>(){
    @Override public int compare(    Object o1,    Object o2){
      return ((TransactionPair<?>)o1).getTransaction().getDate().compareTo((((TransactionPair<?>)o2).getTransaction().getDate()));
    }
  }
),SWT.UP);
  support.addColumn(column);
  column=new Column(Messages.ColumnTransactionType,SWT.None,80);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object element){
      Transaction t=((TransactionPair<?>)element).getTransaction();
      if (t instanceof PortfolioTransaction)       return ((PortfolioTransaction)t).getType().toString();
 else       if (t instanceof AccountTransaction)       return ((AccountTransaction)t).getType().toString();
 else       return null;
    }
  }
);
  support.addColumn(column);
  column=new Column(Messages.ColumnShares,SWT.RIGHT,80);
  column.setLabelProvider(new SharesLabelProvider(){
    @Override public Long getValue(    Object element){
      Transaction t=((TransactionPair<?>)element).getTransaction();
      if (t instanceof PortfolioTransaction) {
        return ((PortfolioTransaction)t).getShares();
      }
 else       if (t instanceof AccountTransaction) {
        long shares=((AccountTransaction)t).getShares();
        return shares != 0 ? shares : null;
      }
      return null;
    }
    @Override public String getToolTipText(    Object element){
      Long v=getValue(element);
      return v != null ? Values.Share.format(v) : null;
    }
  }
);
  support.addColumn(column);
  column=new Column(Messages.ColumnAmount,SWT.RIGHT,80);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object element){
      Transaction t=((TransactionPair<?>)element).getTransaction();
      return Values.Amount.format(t.getAmount());
    }
  }
);
  column.setSorter(ColumnViewerSorter.create(new Comparator<Object>(){
    @Override public int compare(    Object o1,    Object o2){
      long a1=((TransactionPair<?>)o1).getTransaction().getAmount();
      long a2=((TransactionPair<?>)o2).getTransaction().getAmount();
      return a1 > a2 ? 1 : a1 < a2 ? -1 : 0;
    }
  }
));
  support.addColumn(column);
  column=new Column(Messages.ColumnQuote,SWT.RIGHT,80);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object element){
      Transaction t=((TransactionPair<?>)element).getTransaction();
      if (t instanceof PortfolioTransaction) {
        return Values.Amount.format(((PortfolioTransaction)t).getActualPurchasePrice());
      }
 else       if (t instanceof AccountTransaction) {
        long shares=((AccountTransaction)t).getShares();
        if (shares != 0)         return Values.Amount.format(Math.round(t.getAmount() * Values.Share.divider() / shares));
      }
      return null;
    }
  }
);
  support.addColumn(column);
  column=new Column(Messages.ColumnPortfolio,SWT.NONE,120);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object element){
      TransactionOwner<?> owner=((TransactionPair<?>)element).getOwner();
      if (owner instanceof Portfolio)       return owner.toString();
      return null;
    }
  }
);
  support.addColumn(column);
  column=new Column(Messages.ColumnOffsetAccount,SWT.NONE,120);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object element){
      TransactionPair<?> pair=(TransactionPair<?>)element;
      Transaction t=pair.getTransaction();
      if (t instanceof PortfolioTransaction)       return t.getCrossEntry() != null ? t.getCrossEntry().getCrossEntity(t).toString() : null;
 else       return pair.getOwner().toString();
    }
  }
);
  support.addColumn(column);
  support.createColumns();
  transactions.getTable().setHeaderVisible(true);
  transactions.getTable().setLinesVisible(true);
  transactions.setContentProvider(new SimpleListContentProvider(true));
  ViewerHelper.pack(transactions);
  return container;
}