Program: 52774
Project: 52774
Buggy source:
@Override protected void createTopTable(Composite parent){
  Composite container=new Composite(parent,SWT.NONE);
  TableColumnLayout layout=new TableColumnLayout();
  container.setLayout(layout);
  accounts=new TableViewer(container,SWT.FULL_SELECTION);
  ShowHideColumnHelper support=new ShowHideColumnHelper(AccountListView.class.getSimpleName() + "String_Node_Str",accounts,layout);
  Column column=new Column(Messages.ColumnAccount,SWT.None,150);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object e){
      return ((Account)e).getName();
    }
    @Override public Image getImage(    Object element){
      return PortfolioPlugin.image(PortfolioPlugin.IMG_ACCOUNT);
    }
    @Override public Color getForeground(    Object e){
      boolean isRetired=((Account)e).isRetired();
      return isRetired ? Display.getDefault().getSystemColor(SWT.COLOR_DARK_GRAY) : null;
    }
  }
);
  column.setSorter(ColumnViewerSorter.create(Account.class,"String_Node_Str"),SWT.DOWN);
  column.setMoveable(false);
  support.addColumn(column);
  column=new Column(Messages.ColumnBalance,SWT.RIGHT,80);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object e){
      return Values.Amount.format(((Account)e).getCurrentAmount());
    }
  }
);
  column.setSorter(ColumnViewerSorter.create(Account.class,"String_Node_Str"));
  column.setMoveable(false);
  support.addColumn(column);
  support.createColumns();
  accounts.getTable().setHeaderVisible(true);
  accounts.getTable().setLinesVisible(true);
  for (  Account account : getClient().getAccounts()) {
    Collections.sort(account.getTransactions());
  }
  accounts.setContentProvider(new SimpleListContentProvider());
  resetInput();
  accounts.refresh();
  ViewerHelper.pack(accounts);
  accounts.addSelectionChangedListener(new ISelectionChangedListener(){
    public void selectionChanged(    SelectionChangedEvent event){
      Account account=(Account)((IStructuredSelection)event.getSelection()).getFirstElement();
      transactions.setData(Account.class.toString(),account);
      transactions.setInput(account != null ? account.getTransactions() : new ArrayList<AccountTransaction>(0));
      transactions.refresh();
    }
  }
);
  new CellEditorFactory(accounts,Account.class).notify(new CellEditorFactory.ModificationListener(){
    public void onModified(    Object element,    String property){
      markDirty();
      accounts.refresh(transactions.getData(Account.class.toString()));
    }
  }
).editable("String_Node_Str").readonly("String_Node_Str").apply();
  hookContextMenu(accounts.getTable(),new IMenuListener(){
    public void menuAboutToShow(    IMenuManager manager){
      fillAccountsContextMenu(manager);
    }
  }
);
}

Fixed version (ground truth):
@Override protected void createTopTable(Composite parent){
  Composite container=new Composite(parent,SWT.NONE);
  TableColumnLayout layout=new TableColumnLayout();
  container.setLayout(layout);
  accounts=new TableViewer(container,SWT.FULL_SELECTION);
  ShowHideColumnHelper support=new ShowHideColumnHelper(AccountListView.class.getSimpleName() + "String_Node_Str",accounts,layout);
  Column column=new Column(Messages.ColumnAccount,SWT.None,150);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object e){
      return ((Account)e).getName();
    }
    @Override public Image getImage(    Object element){
      return PortfolioPlugin.image(PortfolioPlugin.IMG_ACCOUNT);
    }
    @Override public Color getForeground(    Object e){
      boolean isRetired=((Account)e).isRetired();
      return isRetired ? Display.getDefault().getSystemColor(SWT.COLOR_DARK_GRAY) : null;
    }
  }
);
  column.setSorter(ColumnViewerSorter.create(Account.class,"String_Node_Str"),SWT.DOWN);
  column.setMoveable(false);
  support.addColumn(column);
  column=new Column(Messages.ColumnBalance,SWT.RIGHT,80);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object e){
      return Values.Amount.format(((Account)e).getCurrentAmount());
    }
  }
);
  column.setSorter(ColumnViewerSorter.create(Account.class,"String_Node_Str"));
  column.setMoveable(false);
  support.addColumn(column);
  support.createColumns();
  accounts.getTable().setHeaderVisible(true);
  accounts.getTable().setLinesVisible(true);
  for (  Account account : getClient().getAccounts()) {
    Collections.sort(account.getTransactions(),new Transaction.ByDate());
  }
  accounts.setContentProvider(new SimpleListContentProvider());
  resetInput();
  accounts.refresh();
  ViewerHelper.pack(accounts);
  accounts.addSelectionChangedListener(new ISelectionChangedListener(){
    public void selectionChanged(    SelectionChangedEvent event){
      Account account=(Account)((IStructuredSelection)event.getSelection()).getFirstElement();
      transactions.setData(Account.class.toString(),account);
      transactions.setInput(account != null ? account.getTransactions() : new ArrayList<AccountTransaction>(0));
      transactions.refresh();
    }
  }
);
  new CellEditorFactory(accounts,Account.class).notify(new CellEditorFactory.ModificationListener(){
    public void onModified(    Object element,    String property){
      markDirty();
      accounts.refresh(transactions.getData(Account.class.toString()));
    }
  }
).editable("String_Node_Str").readonly("String_Node_Str").apply();
  hookContextMenu(accounts.getTable(),new IMenuListener(){
    public void menuAboutToShow(    IMenuManager manager){
      fillAccountsContextMenu(manager);
    }
  }
);
}