Program: 108028
Project: 108028
Buggy source:
/** 
 * Constructor
 * @param parent
 * @param controller
 */
public ViewTiles(final Composite parent,final Controller controller){
  super(parent,controller);
  tiles=new Tiles<ARXNode>(super.getPrimaryComposite(),SWT.BORDER);
  tiles.setLayoutData(SWTUtil.createFillGridData());
  tiles.addSelectionListener(new SelectionAdapter(){
    public void widgetSelected(    SelectionEvent arg0){
      ViewTiles.this.actionSelectNode(tiles.getSelectedItem());
    }
  }
);
  tiles.addMouseListener(new MouseAdapter(){
    @Override public void mouseUp(    MouseEvent arg0){
      if (arg0.button == 3) {
        if (getSelectedNode() != null) {
          Point display=tiles.toDisplay(arg0.x,arg0.y);
          getModel().setSelectedNode(getSelectedNode());
          controller.update(new ModelEvent(ViewTiles.this,ModelPart.SELECTED_NODE,getSelectedNode()));
          actionShowMenu(display.x,display.y);
        }
      }
    }
  }
);
  tiles.setTileLayout(new TileLayoutDynamic(NUM_COLUMNS,NUM_ROWS,MARGIN,MARGIN));
  tiles.setComparator(new Comparator<ARXNode>(){
    public int compare(    ARXNode o1,    ARXNode o2){
      boolean unknown2=o2.getMinimumInformationLoss().compareTo(o2.getMaximumInformationLoss()) != 0 && asRelativeValue(o2.getMinimumInformationLoss()) == 0d;
      boolean unknown1=o1.getMinimumInformationLoss().compareTo(o1.getMaximumInformationLoss()) != 0 && asRelativeValue(o1.getMinimumInformationLoss()) == 0d;
      if (unknown1 && unknown2)       return 0;
 else       if (unknown1 && !unknown2)       return +1;
 else       if (!unknown1 && unknown2)       return -1;
 else {
        int c1=o1.getMinimumInformationLoss().compareTo(o2.getMinimumInformationLoss());
        return c1 != 0 ? c1 : o1.getMaximumInformationLoss().compareTo(o2.getMaximumInformationLoss());
      }
    }
  }
);
  tiles.setFilter(new Filter<ARXNode>(){
    public boolean accepts(    ARXNode arg0){
      return true;
    }
  }
);
  tiles.setDecoratorLabel(new DecoratorString<ARXNode>(){
    @Override public String decorate(    ARXNode node){
      String text=Arrays.toString(node.getTransformation());
      text=text.substring(1,text.length() - 1);
      return trimLabel(text);
    }
  }
);
  tiles.setDecoratorBackgroundColor(createDecoratorBackgroundColor());
  tiles.setDecoratorTooltip(super.getTooltipDecorator());
  tiles.setDecoratorLineColor(createDecoratorLineColor());
  tiles.setDecoratorLineWidth(createDecoratorLineWidth());
  tiles.setBackground(tiles.getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
  tiles.update();
}

Fixed version (ground truth):
/** 
 * Constructor
 * @param parent
 * @param controller
 */
public ViewTiles(final Composite parent,final Controller controller){
  super(parent,controller);
  tiles=new Tiles<ARXNode>(super.getPrimaryComposite(),SWT.BORDER);
  tiles.setLayoutData(SWTUtil.createFillGridData());
  tiles.addSelectionListener(new SelectionAdapter(){
    public void widgetSelected(    SelectionEvent arg0){
      ViewTiles.this.actionSelectNode(tiles.getSelectedItem());
    }
  }
);
  tiles.addMouseListener(new MouseAdapter(){
    @Override public void mouseUp(    MouseEvent arg0){
      if (arg0.button == 3) {
        if (getSelectedNode() != null) {
          Point display=tiles.toDisplay(arg0.x,arg0.y);
          getModel().setSelectedNode(getSelectedNode());
          controller.update(new ModelEvent(ViewTiles.this,ModelPart.SELECTED_NODE,getSelectedNode()));
          actionShowMenu(display.x,display.y);
        }
      }
    }
  }
);
  tiles.setTileLayout(new TileLayoutDynamic(NUM_COLUMNS,NUM_ROWS,MARGIN,MARGIN));
  tiles.setComparator(new Comparator<ARXNode>(){
    public int compare(    ARXNode o1,    ARXNode o2){
      boolean unknown2=o2.getMinimumInformationLoss().compareTo(o2.getMaximumInformationLoss()) != 0 && asRelativeValue(o2.getMinimumInformationLoss()) == 0d;
      boolean unknown1=o1.getMinimumInformationLoss().compareTo(o1.getMaximumInformationLoss()) != 0 && asRelativeValue(o1.getMinimumInformationLoss()) == 0d;
      if (unknown1 && unknown2)       return 0;
 else       if (unknown1 && !unknown2)       return +1;
 else       if (!unknown1 && unknown2)       return -1;
 else {
        try {
          int c1=o1.getMinimumInformationLoss().compareTo(o2.getMinimumInformationLoss());
          return c1 != 0 ? c1 : o1.getMaximumInformationLoss().compareTo(o2.getMaximumInformationLoss());
        }
 catch (        Exception e) {
          return 0;
        }
      }
    }
  }
);
  tiles.setFilter(new Filter<ARXNode>(){
    public boolean accepts(    ARXNode arg0){
      return true;
    }
  }
);
  tiles.setDecoratorLabel(new DecoratorString<ARXNode>(){
    @Override public String decorate(    ARXNode node){
      String text=Arrays.toString(node.getTransformation());
      text=text.substring(1,text.length() - 1);
      return trimLabel(text);
    }
  }
);
  tiles.setDecoratorBackgroundColor(createDecoratorBackgroundColor());
  tiles.setDecoratorTooltip(super.getTooltipDecorator());
  tiles.setDecoratorLineColor(createDecoratorLineColor());
  tiles.setDecoratorLineWidth(createDecoratorLineWidth());
  tiles.setBackground(tiles.getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND));
  tiles.update();
}