Program: 52677
Project: 52677
Buggy source:
private void addColumns(ShowHideColumnHelper support){
  Column column=new NameColumn("String_Node_Str",Messages.ColumnName,SWT.None,100);
  column.getEditingSupport().addListener(this);
  support.addColumn(column);
  column=new Column(Messages.ColumnSecurity,SWT.NONE,250);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object e){
      InvestmentPlan plan=(InvestmentPlan)e;
      return plan.getSecurity() != null ? plan.getSecurity().getName() : null;
    }
    @Override public Image getImage(    Object e){
      InvestmentPlan plan=(InvestmentPlan)e;
      return (plan.getSecurity() != null ? Images.SECURITY.image() : null);
    }
  }
);
  ColumnViewerSorter.create(Security.class,"String_Node_Str").attachTo(column);
  List<Security> securities=new ArrayList<>(getClient().getSecurities());
  Collections.sort(securities,new Security.ByName());
  new ListEditingSupport(InvestmentPlan.class,"String_Node_Str",securities).addListener(this).attachTo(column);
  support.addColumn(column);
  column=new Column(Messages.ColumnPortfolio,SWT.None,120);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object e){
      InvestmentPlan plan=(InvestmentPlan)e;
      return plan.getPortfolio() != null ? plan.getPortfolio().getName() : Messages.InvestmentPlanOptionDeposit;
    }
    @Override public Image getImage(    Object e){
      InvestmentPlan plan=(InvestmentPlan)e;
      return plan.getPortfolio() != null ? Images.PORTFOLIO.image() : null;
    }
  }
);
  ColumnViewerSorter.create(InvestmentPlan.class,"String_Node_Str").attachTo(column);
  new ListEditingSupport(InvestmentPlan.class,"String_Node_Str",getClient().getActivePortfolios()).addListener(this).attachTo(column);
  support.addColumn(column);
  column=new Column(Messages.ColumnAccount,SWT.None,120);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object e){
      InvestmentPlan plan=(InvestmentPlan)e;
      return plan.getAccount() != null ? plan.getAccount().getName() : Messages.InvestmentPlanOptionDelivery;
    }
    @Override public Image getImage(    Object e){
      InvestmentPlan plan=(InvestmentPlan)e;
      return plan.getAccount() != null ? Images.ACCOUNT.image() : null;
    }
  }
);
  ColumnViewerSorter.create(Account.class,"String_Node_Str").attachTo(column);
  List<Account> accounts=new ArrayList<>();
  accounts.add(InvestmentPlanModel.DELIVERY);
  accounts.addAll(getClient().getAccounts());
  new ListEditingSupport(InvestmentPlan.class,"String_Node_Str",accounts).addListener(this).attachTo(column);
  support.addColumn(column);
  column=new Column(Messages.ColumnStartDate,SWT.None,80);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object e){
      return Values.Date.format(((InvestmentPlan)e).getStart());
    }
  }
);
  ColumnViewerSorter.create(InvestmentPlan.class,"String_Node_Str").attachTo(column);
  new DateEditingSupport(InvestmentPlan.class,"String_Node_Str").addListener(this).attachTo(column);
  support.addColumn(column);
  column=new Column(Messages.ColumnInterval,SWT.None,80);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object e){
      return MessageFormat.format(Messages.InvestmentPlanIntervalLabel,((InvestmentPlan)e).getInterval());
    }
  }
);
  ColumnViewerSorter.create(InvestmentPlan.class,"String_Node_Str").attachTo(column);
  List<Integer> available=new ArrayList<>();
  for (int ii=1; ii <= 12; ii++)   available.add(ii);
  new ListEditingSupport(InvestmentPlan.class,"String_Node_Str",available).addListener(this).attachTo(column);
  support.addColumn(column);
  column=new Column(Messages.ColumnAmount,SWT.RIGHT,80);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object e){
      InvestmentPlan plan=(InvestmentPlan)e;
      return Values.Money.format(Money.of(plan.getCurrencyCode(),plan.getAmount()));
    }
  }
);
  ColumnViewerSorter.create(InvestmentPlan.class,"String_Node_Str").attachTo(column);
  new ValueEditingSupport(InvestmentPlan.class,"String_Node_Str",Values.Amount).addListener(this).attachTo(column);
  support.addColumn(column);
  column=new Column(Messages.ColumnFees,SWT.RIGHT,80);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object e){
      InvestmentPlan plan=(InvestmentPlan)e;
      return Values.Money.format(Money.of(plan.getCurrencyCode(),plan.getFees()));
    }
  }
);
  ColumnViewerSorter.create(InvestmentPlan.class,"String_Node_Str").attachTo(column);
  new ValueEditingSupport(InvestmentPlan.class,"String_Node_Str",Values.Amount).addListener(this).attachTo(column);
  support.addColumn(column);
  column=new Column(Messages.ColumnAutoGenerate,SWT.LEFT,80);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object e){
      return "String_Node_Str";
    }
    @Override public Image getImage(    Object e){
      return ((InvestmentPlan)e).isAutoGenerate() ? Images.CHECK.image() : null;
    }
  }
);
  ColumnViewerSorter.create(InvestmentPlan.class,"String_Node_Str").attachTo(column);
  new BooleanEditingSupport(InvestmentPlan.class,"String_Node_Str").addListener(this).attachTo(column);
  support.addColumn(column);
  column=new NoteColumn();
  column.getEditingSupport().addListener(this);
  column.setVisible(false);
  support.addColumn(column);
}

Fixed version (ground truth):
private void addColumns(ShowHideColumnHelper support){
  Column column=new NameColumn("String_Node_Str",Messages.ColumnName,SWT.None,100);
  column.getEditingSupport().addListener(this);
  support.addColumn(column);
  column=new Column(Messages.ColumnSecurity,SWT.NONE,250);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object e){
      InvestmentPlan plan=(InvestmentPlan)e;
      return plan.getSecurity() != null ? plan.getSecurity().getName() : null;
    }
    @Override public Image getImage(    Object e){
      InvestmentPlan plan=(InvestmentPlan)e;
      return (plan.getSecurity() != null ? Images.SECURITY.image() : null);
    }
  }
);
  ColumnViewerSorter.create(Security.class,"String_Node_Str").attachTo(column);
  support.addColumn(column);
  column=new Column(Messages.ColumnPortfolio,SWT.None,120);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object e){
      InvestmentPlan plan=(InvestmentPlan)e;
      return plan.getPortfolio() != null ? plan.getPortfolio().getName() : Messages.InvestmentPlanOptionDeposit;
    }
    @Override public Image getImage(    Object e){
      InvestmentPlan plan=(InvestmentPlan)e;
      return plan.getPortfolio() != null ? Images.PORTFOLIO.image() : null;
    }
  }
);
  ColumnViewerSorter.create(InvestmentPlan.class,"String_Node_Str").attachTo(column);
  support.addColumn(column);
  column=new Column(Messages.ColumnAccount,SWT.None,120);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object e){
      InvestmentPlan plan=(InvestmentPlan)e;
      return plan.getAccount() != null ? plan.getAccount().getName() : Messages.InvestmentPlanOptionDelivery;
    }
    @Override public Image getImage(    Object e){
      InvestmentPlan plan=(InvestmentPlan)e;
      return plan.getAccount() != null ? Images.ACCOUNT.image() : null;
    }
  }
);
  ColumnViewerSorter.create(Account.class,"String_Node_Str").attachTo(column);
  support.addColumn(column);
  column=new Column(Messages.ColumnStartDate,SWT.None,80);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object e){
      return Values.Date.format(((InvestmentPlan)e).getStart());
    }
  }
);
  ColumnViewerSorter.create(InvestmentPlan.class,"String_Node_Str").attachTo(column);
  new DateEditingSupport(InvestmentPlan.class,"String_Node_Str").addListener(this).attachTo(column);
  support.addColumn(column);
  column=new Column(Messages.ColumnInterval,SWT.None,80);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object e){
      return MessageFormat.format(Messages.InvestmentPlanIntervalLabel,((InvestmentPlan)e).getInterval());
    }
  }
);
  ColumnViewerSorter.create(InvestmentPlan.class,"String_Node_Str").attachTo(column);
  List<Integer> available=new ArrayList<>();
  for (int ii=1; ii <= 12; ii++)   available.add(ii);
  new ListEditingSupport(InvestmentPlan.class,"String_Node_Str",available).addListener(this).attachTo(column);
  support.addColumn(column);
  column=new Column(Messages.ColumnAmount,SWT.RIGHT,80);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object e){
      InvestmentPlan plan=(InvestmentPlan)e;
      return Values.Money.format(Money.of(plan.getCurrencyCode(),plan.getAmount()));
    }
  }
);
  ColumnViewerSorter.create(InvestmentPlan.class,"String_Node_Str").attachTo(column);
  new ValueEditingSupport(InvestmentPlan.class,"String_Node_Str",Values.Amount).addListener(this).attachTo(column);
  support.addColumn(column);
  column=new Column(Messages.ColumnFees,SWT.RIGHT,80);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object e){
      InvestmentPlan plan=(InvestmentPlan)e;
      return Values.Money.format(Money.of(plan.getCurrencyCode(),plan.getFees()));
    }
  }
);
  ColumnViewerSorter.create(InvestmentPlan.class,"String_Node_Str").attachTo(column);
  support.addColumn(column);
  column=new Column(Messages.ColumnAutoGenerate,SWT.LEFT,80);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object e){
      return "String_Node_Str";
    }
    @Override public Image getImage(    Object e){
      return ((InvestmentPlan)e).isAutoGenerate() ? Images.CHECK.image() : null;
    }
  }
);
  ColumnViewerSorter.create(InvestmentPlan.class,"String_Node_Str").attachTo(column);
  new BooleanEditingSupport(InvestmentPlan.class,"String_Node_Str").addListener(this).attachTo(column);
  support.addColumn(column);
  column=new NoteColumn();
  column.getEditingSupport().addListener(this);
  column.setVisible(false);
  support.addColumn(column);
}