Program: 107868
Project: 107868
Buggy source:
@Override protected Control createControl(Composite parent){
  this.root=new Composite(parent,SWT.NONE);
  this.root.setLayout(new FillLayout());
  this.sash=new SashForm(this.root,SWT.VERTICAL);
  this.table=SWTUtil.createTableDynamic(this.sash,SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL| SWT.FULL_SELECTION);
  this.table.setHeaderVisible(true);
  this.table.setLinesVisible(true);
  this.table.setMenu(new ClipboardHandlerTable(table).getMenu());
  String[] columns=getColumnHeaders();
  String width=String.valueOf(Math.round(100d / ((double)columns.length + 2) * 100d) / 100d) + "String_Node_Str";
  DynamicTableColumn c=new DynamicTableColumn(table,SWT.LEFT);
  c.setWidth(width,"String_Node_Str");
  c.setText(Resources.getMessage("String_Node_Str"));
  c=new DynamicTableColumn(table,SWT.LEFT);
  c.setWidth(width,"String_Node_Str");
  c.setText(Resources.getMessage("String_Node_Str"));
  for (  String column : columns) {
    c=new DynamicTableColumn(table,SWT.LEFT);
    SWTUtil.createColumnWithBarCharts(table,c);
    c.setWidth(width,"String_Node_Str");
    c.setText(column);
  }
  for (  final TableColumn col : table.getColumns()) {
    col.pack();
  }
  SWTUtil.createGenericTooltip(table);
  resetChart();
  this.sash.setWeights(new int[]{2,2});
  final StringBuilder builder=new StringBuilder();
  this.sash.addListener(SWT.MouseMove,new Listener(){
    @Override public void handleEvent(    Event event){
      if (chart != null) {
        IAxisSet axisSet=chart.getAxisSet();
        if (axisSet != null) {
          IAxis xAxis=axisSet.getXAxis(0);
          if (xAxis != null) {
            Point cursor=chart.getPlotArea().toControl(Display.getCurrent().getCursorLocation());
            if (cursor.x >= 0 && cursor.x < chart.getPlotArea().getSize().x && cursor.y >= 0 && cursor.y < chart.getPlotArea().getSize().y) {
              String[] series=xAxis.getCategorySeries();
              ISeries[] data=chart.getSeriesSet().getSeries();
              if (data != null && data.length > 0 && series != null) {
                int x=(int)Math.round(xAxis.getDataCoordinate(cursor.x));
                if (x >= 0 && x < series.length && !series[x].equals("String_Node_Str")) {
                  builder.setLength(0);
                  builder.append("String_Node_Str");
                  builder.append(Resources.getMessage("String_Node_Str")).append("String_Node_Str");
                  builder.append(series[x]);
                  builder.append("String_Node_Str").append(Resources.getMessage("String_Node_Str")).append("String_Node_Str");
                  builder.append(SWTUtil.getPrettyString(data[0].getYSeries()[x]));
                  builder.append("String_Node_Str").append(Resources.getMessage("String_Node_Str")).append("String_Node_Str");
                  builder.append(SWTUtil.getPrettyString(data[1].getYSeries()[x]));
                  builder.append("String_Node_Str");
                  sash.setToolTipText(builder.toString());
                  return;
                }
              }
            }
          }
        }
        sash.setToolTipText(null);
      }
    }
  }
);
  table.addListener(SWT.MouseDown,new Listener(){
    public void handleEvent(    Event event){
      Rectangle clientArea=table.getClientArea();
      Point pt=new Point(event.x,event.y);
      int index=table.getTopIndex();
      while (index < table.getItemCount()) {
        boolean visible=false;
        TableItem item=table.getItem(index);
        for (int i=0; i < table.getColumnCount(); i++) {
          Rectangle rect=item.getBounds(i);
          if (rect.contains(pt)) {
            if (item.getData() != null && item.getData() instanceof PrecisionRecallMatrix) {
              setChartSeries((PrecisionRecallMatrix)item.getData());
            }
            getModel().setSelectedAttribute(item.getText(0));
            getController().update(new ModelEvent(ViewStatisticsLogisticRegression.this,ModelPart.SELECTED_ATTRIBUTE,item.getText(0)));
            return;
          }
          if (!visible && rect.intersects(clientArea)) {
            visible=true;
          }
        }
        if (!visible)         return;
        index++;
      }
    }
  }
);
  return this.root;
}

Fixed version (ground truth):
@Override protected Control createControl(Composite parent){
  this.root=new Composite(parent,SWT.NONE);
  this.root.setLayout(new FillLayout());
  this.sash=new SashForm(this.root,SWT.VERTICAL);
  this.table=SWTUtil.createTableDynamic(this.sash,SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL| SWT.FULL_SELECTION);
  this.table.setHeaderVisible(true);
  this.table.setLinesVisible(true);
  this.table.setMenu(new ClipboardHandlerTable(table).getMenu());
  String[] columns=getColumnHeaders();
  String width=String.valueOf(Math.round(100d / ((double)columns.length + 2) * 100d) / 100d) + "String_Node_Str";
  DynamicTableColumn c=new DynamicTableColumn(table,SWT.LEFT);
  c.setWidth(width,"String_Node_Str");
  c.setText(Resources.getMessage("String_Node_Str"));
  c=new DynamicTableColumn(table,SWT.LEFT);
  c.setWidth(width,"String_Node_Str");
  c.setText(Resources.getMessage("String_Node_Str"));
  for (  String column : columns) {
    c=new DynamicTableColumn(table,SWT.LEFT);
    SWTUtil.createColumnWithBarCharts(table,c);
    c.setWidth(width,"String_Node_Str");
    c.setText(column);
  }
  for (  final TableColumn col : table.getColumns()) {
    col.pack();
  }
  SWTUtil.createGenericTooltip(table);
  resetChart();
  this.sash.setWeights(new int[]{2,2});
  final StringBuilder builder=new StringBuilder();
  this.sash.addListener(SWT.MouseMove,new Listener(){
    @Override public void handleEvent(    Event event){
      if (chart != null) {
        IAxisSet axisSet=chart.getAxisSet();
        if (axisSet != null) {
          IAxis xAxis=axisSet.getXAxis(0);
          if (xAxis != null) {
            Point cursor=chart.getPlotArea().toControl(Display.getCurrent().getCursorLocation());
            if (cursor.x >= 0 && cursor.x < chart.getPlotArea().getSize().x && cursor.y >= 0 && cursor.y < chart.getPlotArea().getSize().y) {
              String[] series=xAxis.getCategorySeries();
              ISeries[] data=chart.getSeriesSet().getSeries();
              if (data != null && data.length == 3 && series != null) {
                int x=(int)Math.round(xAxis.getDataCoordinate(cursor.x));
                if (x >= 0 && x < series.length && !series[x].equals("String_Node_Str")) {
                  builder.setLength(0);
                  builder.append("String_Node_Str");
                  builder.append(Resources.getMessage("String_Node_Str")).append("String_Node_Str");
                  builder.append(series[x]);
                  builder.append("String_Node_Str").append(precision).append("String_Node_Str");
                  builder.append(SWTUtil.getPrettyString(chart.getSeriesSet().getSeries(precision).getYSeries()[x]));
                  builder.append("String_Node_Str").append(recall).append("String_Node_Str");
                  builder.append(SWTUtil.getPrettyString(chart.getSeriesSet().getSeries(recall).getYSeries()[x]));
                  builder.append("String_Node_Str").append(fscore).append("String_Node_Str");
                  builder.append(SWTUtil.getPrettyString(chart.getSeriesSet().getSeries(fscore).getYSeries()[x]));
                  builder.append("String_Node_Str");
                  sash.setToolTipText(builder.toString());
                  return;
                }
              }
            }
          }
        }
        sash.setToolTipText(null);
      }
    }
  }
);
  table.addListener(SWT.MouseDown,new Listener(){
    public void handleEvent(    Event event){
      Rectangle clientArea=table.getClientArea();
      Point pt=new Point(event.x,event.y);
      int index=table.getTopIndex();
      while (index < table.getItemCount()) {
        boolean visible=false;
        TableItem item=table.getItem(index);
        for (int i=0; i < table.getColumnCount(); i++) {
          Rectangle rect=item.getBounds(i);
          if (rect.contains(pt)) {
            if (item.getData() != null && item.getData() instanceof PrecisionRecallMatrix) {
              setChartSeries((PrecisionRecallMatrix)item.getData());
            }
            getModel().setSelectedAttribute(item.getText(0));
            getController().update(new ModelEvent(ViewStatisticsLogisticRegression.this,ModelPart.SELECTED_ATTRIBUTE,item.getText(0)));
            return;
          }
          if (!visible && rect.intersects(clientArea)) {
            visible=true;
          }
        }
        if (!visible)         return;
        index++;
      }
    }
  }
);
  return this.root;
}