Program: 52708
Project: 52708
Buggy source:
@Override protected void addColumns(ShowHideColumnHelper support){
  addDimensionColumn(support);
  addDesiredAllocationColumn(support);
  Column column=new Column("String_Node_Str",Messages.ColumnTargetValue,SWT.RIGHT,100);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object element){
      TaxonomyNode node=(TaxonomyNode)element;
      return node.isClassification() ? Values.Money.format(node.getTarget(),getModel().getCurrencyCode()) : null;
    }
  }
);
  support.addColumn(column);
  addActualColumns(support);
  column=new Column("String_Node_Str",Messages.ColumnDeltaPercent,SWT.RIGHT,60);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object element){
      TaxonomyNode node=(TaxonomyNode)element;
      if (node.getTarget() == null)       return null;
      return Values.Percent.format(((double)node.getActual().getAmount() / (double)node.getTarget().getAmount()) - 1);
    }
    @Override public Color getForeground(    Object element){
      TaxonomyNode node=(TaxonomyNode)element;
      if (node.getTarget() == null)       return null;
      return Display.getCurrent().getSystemColor(node.getActual().isGreaterOrEqualThan(node.getTarget()) ? SWT.COLOR_DARK_GREEN : SWT.COLOR_DARK_RED);
    }
  }
);
  support.addColumn(column);
  column=new Column("String_Node_Str",Messages.ColumnDeltaValue,SWT.RIGHT,100);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object element){
      TaxonomyNode node=(TaxonomyNode)element;
      if (node.getTarget() == null)       return null;
      return Values.Money.format(node.getActual().subtract(node.getTarget()),getModel().getCurrencyCode());
    }
    @Override public Color getForeground(    Object element){
      TaxonomyNode node=(TaxonomyNode)element;
      if (node.getTarget() == null)       return null;
      return Display.getCurrent().getSystemColor(node.getActual().isGreaterOrEqualThan(node.getTarget()) ? SWT.COLOR_DARK_GREEN : SWT.COLOR_DARK_RED);
    }
  }
);
  support.addColumn(column);
  column=new Column("String_Node_Str",Messages.ColumnQuote,SWT.RIGHT,60);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object element){
      TaxonomyNode node=(TaxonomyNode)element;
      Security security=node.getBackingSecurity();
      if (security == null || security.getCurrencyCode() == null)       return null;
      SecurityPrice price=security.getSecurityPrice(LocalDate.now());
      return Values.Quote.format(security.getCurrencyCode(),price.getValue(),getModel().getCurrencyCode());
    }
  }
);
  support.addColumn(column);
  column=new Column("String_Node_Str",Messages.ColumnDeltaShares,SWT.RIGHT,100);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object element){
      TaxonomyNode node=(TaxonomyNode)element;
      if (node.getParent() != null && node.getParent().isUnassignedCategory())       return null;
      Security security=node.getBackingSecurity();
      if (security == null || security.getCurrencyCode() == null)       return null;
      String priceCurrency=security.getCurrencyCode();
      long price=security.getSecurityPrice(LocalDate.now()).getValue();
      long weightedPrice=Math.round(node.getWeight() * price / Classification.ONE_HUNDRED_PERCENT);
      if (weightedPrice == 0L)       return Values.Share.format(0L);
      String deltaCurrency=node.getActual().getCurrencyCode();
      long delta=node.getParent().getTarget().getAmount() - node.getParent().getActual().getAmount();
      if (!deltaCurrency.equals(priceCurrency)) {
        delta=getModel().getCurrencyConverter().with(priceCurrency).convert(LocalDate.now(),Money.of(deltaCurrency,delta)).getAmount();
      }
      long shares=Math.round(delta * Values.Share.factor() * Values.Quote.factorToMoney() / weightedPrice);
      return Values.Share.format(shares);
    }
  }
);
  support.addColumn(column);
  addAdditionalColumns(support);
}

Fixed version (ground truth):
@Override protected void addColumns(ShowHideColumnHelper support){
  addDimensionColumn(support);
  addDesiredAllocationColumn(support);
  Column column=new Column("String_Node_Str",Messages.ColumnTargetValue,SWT.RIGHT,100);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object element){
      TaxonomyNode node=(TaxonomyNode)element;
      return node.isClassification() ? Values.Money.format(node.getTarget(),getModel().getCurrencyCode()) : null;
    }
  }
);
  support.addColumn(column);
  addActualColumns(support);
  column=new Column("String_Node_Str",Messages.ColumnDeltaPercent,SWT.RIGHT,60);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object element){
      TaxonomyNode node=(TaxonomyNode)element;
      if (node.getTarget() == null)       return null;
      return Values.Percent.format(((double)node.getActual().getAmount() / (double)node.getTarget().getAmount()) - 1);
    }
    @Override public Color getForeground(    Object element){
      TaxonomyNode node=(TaxonomyNode)element;
      if (node.getTarget() == null)       return null;
      return Display.getCurrent().getSystemColor(node.getActual().isGreaterOrEqualThan(node.getTarget()) ? SWT.COLOR_DARK_GREEN : SWT.COLOR_DARK_RED);
    }
  }
);
  support.addColumn(column);
  column=new Column("String_Node_Str",Messages.ColumnDeltaValue,SWT.RIGHT,100);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object element){
      TaxonomyNode node=(TaxonomyNode)element;
      if (node.getTarget() == null)       return null;
      return Values.Money.format(node.getActual().subtract(node.getTarget()),getModel().getCurrencyCode());
    }
    @Override public Color getForeground(    Object element){
      TaxonomyNode node=(TaxonomyNode)element;
      if (node.getTarget() == null)       return null;
      return Display.getCurrent().getSystemColor(node.getActual().isGreaterOrEqualThan(node.getTarget()) ? SWT.COLOR_DARK_GREEN : SWT.COLOR_DARK_RED);
    }
  }
);
  support.addColumn(column);
  column=new Column("String_Node_Str",Messages.ColumnQuote,SWT.RIGHT,60);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object element){
      TaxonomyNode node=(TaxonomyNode)element;
      Security security=node.getBackingSecurity();
      if (security == null || security.getCurrencyCode() == null)       return null;
      SecurityPrice price=security.getSecurityPrice(LocalDate.now());
      return Values.Quote.format(security.getCurrencyCode(),price.getValue(),getModel().getCurrencyCode());
    }
  }
);
  support.addColumn(column);
  column=new Column("String_Node_Str",Messages.ColumnDeltaShares,SWT.RIGHT,100);
  column.setLabelProvider(new ColumnLabelProvider(){
    @Override public String getText(    Object element){
      TaxonomyNode node=(TaxonomyNode)element;
      if (node.getParent() != null && node.getParent().isUnassignedCategory())       return null;
      Security security=node.getBackingSecurity();
      if (security == null || security.getCurrencyCode() == null)       return null;
      String priceCurrency=security.getCurrencyCode();
      long price=security.getSecurityPrice(LocalDate.now()).getValue();
      long weightedPrice=Math.round(node.getWeight() * price / (double)Classification.ONE_HUNDRED_PERCENT);
      if (weightedPrice == 0L)       return Values.Share.format(0L);
      String deltaCurrency=node.getActual().getCurrencyCode();
      long delta=node.getParent().getTarget().getAmount() - node.getParent().getActual().getAmount();
      if (!deltaCurrency.equals(priceCurrency)) {
        delta=getModel().getCurrencyConverter().with(priceCurrency).convert(LocalDate.now(),Money.of(deltaCurrency,delta)).getAmount();
      }
      long shares=Math.round(delta * Values.Share.divider() * Values.Quote.dividerToMoney() / weightedPrice);
      return Values.Share.format(shares);
    }
  }
);
  support.addColumn(column);
  addAdditionalColumns(support);
}