Program: 56714
Project: 56714
Buggy source:
@Override public void configureUiBindings(UiBindingRegistry uiBindingRegistry){
  uiBindingRegistry.registerDoubleClickBinding(new CellPainterMouseEventMatcher(GridRegion.BODY,MouseEventMatcher.LEFT_BUTTON,colorCellPainter),new ChangeColorAction());
  if (areRowsMoveable) {
    IMouseAction moveUp=new IMouseAction(){
      @Override public void run(      NatTable natTable,      MouseEvent event){
        int rowIndex=natTable.getRowPositionByY(event.y) - 1;
        if (rowIndex > 0) {
          swapRows(rowIndex,rowIndex - 1);
          update();
          selectRow(rowIndex - 1);
        }
      }
    }
;
    IMouseAction moveDown=new IMouseAction(){
      @Override public void run(      NatTable natTable,      MouseEvent event){
        int rowIndex=natTable.getRowPositionByY(event.y) - 1;
        if (rowIndex != -1 && rowIndex < getRowCount() - 1) {
          swapRows(rowIndex,rowIndex + 1);
          update();
          selectRow(rowIndex + 1);
        }
      }
    }
;
    uiBindingRegistry.registerFirstSingleClickBinding(new CellPainterMouseEventMatcher(GridRegion.ROW_HEADER,MouseEventMatcher.LEFT_BUTTON,upPainter),moveUp);
    uiBindingRegistry.registerFirstSingleClickBinding(new CellPainterMouseEventMatcher(GridRegion.ROW_HEADER,MouseEventMatcher.LEFT_BUTTON,downPainter),moveDown);
    uiBindingRegistry.registerFirstSingleClickBinding(new CellPainterMouseEventMatcher(GridRegion.ROW_HEADER,MouseEventMatcher.LEFT_BUTTON,upImagePainter),moveUp);
    uiBindingRegistry.registerFirstSingleClickBinding(new CellPainterMouseEventMatcher(GridRegion.ROW_HEADER,MouseEventMatcher.LEFT_BUTTON,downImagePainter),moveDown);
  }
}

Fixed version (ground truth):
@Override public void configureUiBindings(UiBindingRegistry uiBindingRegistry){
  uiBindingRegistry.registerDoubleClickBinding(new CellPainterMouseEventMatcher(GridRegion.BODY,MouseEventMatcher.LEFT_BUTTON,colorCellPainter),new ChangeColorAction());
  if (areRowsMoveable) {
    IMouseAction moveUp=new IMouseAction(){
      @Override public void run(      NatTable natTable,      MouseEvent event){
        int rowIndex=natTable.getRowIndexByPosition(natTable.getRowPositionByY(event.y));
        if (rowIndex > 0) {
          swapRows(rowIndex,rowIndex - 1);
          update();
          selectRow(rowIndex - 1);
        }
      }
    }
;
    IMouseAction moveDown=new IMouseAction(){
      @Override public void run(      NatTable natTable,      MouseEvent event){
        int rowIndex=natTable.getRowIndexByPosition(natTable.getRowPositionByY(event.y));
        if (rowIndex != -1 && rowIndex < getRowCount() - 1) {
          swapRows(rowIndex,rowIndex + 1);
          update();
          selectRow(rowIndex + 1);
        }
      }
    }
;
    uiBindingRegistry.registerFirstSingleClickBinding(new CellPainterMouseEventMatcher(GridRegion.ROW_HEADER,MouseEventMatcher.LEFT_BUTTON,upPainter),moveUp);
    uiBindingRegistry.registerFirstSingleClickBinding(new CellPainterMouseEventMatcher(GridRegion.ROW_HEADER,MouseEventMatcher.LEFT_BUTTON,downPainter),moveDown);
    uiBindingRegistry.registerFirstSingleClickBinding(new CellPainterMouseEventMatcher(GridRegion.ROW_HEADER,MouseEventMatcher.LEFT_BUTTON,upImagePainter),moveUp);
    uiBindingRegistry.registerFirstSingleClickBinding(new CellPainterMouseEventMatcher(GridRegion.ROW_HEADER,MouseEventMatcher.LEFT_BUTTON,downImagePainter),moveDown);
  }
}