Program: 58462
Project: 58462
Buggy source:
private void renderSplineRelation(GL gl,ContentVirtualArray va,HeatMapWrapper heatMapWrapper){
  float alpha=0.3f;
  ContentSelectionManager contentSelectionManager=useCase.getContentSelectionManager();
  gl.glColor3f(0,0,0);
  for (  Integer contentID : va) {
    for (    SelectionType type : contentSelectionManager.getSelectionTypes(contentID)) {
      float[] typeColor=type.getColor();
      typeColor[3]=alpha;
      gl.glColor4fv(typeColor,0);
      if (type == SelectionType.MOUSE_OVER || type == SelectionType.SELECTION) {
        gl.glLineWidth(5);
        break;
      }
 else {
        gl.glLineWidth(1);
      }
    }
    Vec2f leftPos;
    if (heatMapWrapper == leftHeatMapWrapper)     leftPos=heatMapWrapper.getRightOverviewLinkPositionFromContentID(contentID);
 else     leftPos=heatMapWrapper.getLeftOverviewLinkPositionFromContentID(contentID);
    if (leftPos == null)     return;
    Vec2f rightPos;
    if (heatMapWrapper == leftHeatMapWrapper)     rightPos=heatMapWrapper.getLeftDetailLinkPositionFromContentID(contentID);
 else     rightPos=heatMapWrapper.getRightDetailLinkPositionFromContentID(contentID);
    if (rightPos == null)     return;
    if (xOffset == 0) {
      for (      Pair<Float,Integer> cluseterToXOffset : sortedClustersXOffsetUp) {
        if (contentID.equals(cluseterToXOffset.getSecond())) {
          xOffset=(rightPos.x() - leftPos.x()) * -((float)sortedClustersXOffsetUp.indexOf(cluseterToXOffset) + 1) / (sortedClustersXOffsetUp.size() + 1);
          break;
        }
      }
      for (      Pair<Float,Integer> cluseterToXOffset : sortedClustersXOffsetDown) {
        if (contentID.equals(cluseterToXOffset.getSecond())) {
          xOffset=(rightPos.x() - leftPos.x()) * -((float)sortedClustersXOffsetDown.indexOf(cluseterToXOffset) + 1) / (sortedClustersXOffsetDown.size() + 1);
          break;
        }
      }
    }
    if (xOffset == 0)     continue;
    ArrayList<Vec3f> points=new ArrayList<Vec3f>();
    points.add(new Vec3f(leftPos.x(),leftPos.y(),0));
    points.add(new Vec3f(rightPos.x() + xOffset,leftPos.y(),0));
    points.add(new Vec3f(rightPos.x() + xOffset,rightPos.y(),0));
    points.add(new Vec3f(rightPos.x(),rightPos.y(),0));
    NURBSCurve curve=new NURBSCurve(points,30);
    points=curve.getCurvePoints();
    gl.glBegin(GL.GL_LINE_STRIP);
    for (int i=0; i < points.size(); i++)     gl.glVertex3f(points.get(i).x(),points.get(i).y(),0.001f);
    gl.glEnd();
  }
}

Fixed version (ground truth):
private void renderSplineRelation(GL gl,ContentVirtualArray va,HeatMapWrapper heatMapWrapper){
  float alpha=0.6f;
  ContentSelectionManager contentSelectionManager=useCase.getContentSelectionManager();
  for (  Integer contentID : va) {
    for (    SelectionType type : contentSelectionManager.getSelectionTypes(contentID)) {
      float[] typeColor=type.getColor();
      typeColor[3]=alpha;
      gl.glColor4fv(typeColor,0);
      if (type == SelectionType.MOUSE_OVER || type == SelectionType.SELECTION || type == activeHeatMapSelectionType) {
        gl.glLineWidth(3);
        break;
      }
 else {
        gl.glLineWidth(1);
        break;
      }
    }
    Vec2f leftPos;
    if (heatMapWrapper == leftHeatMapWrapper)     leftPos=heatMapWrapper.getRightOverviewLinkPositionFromContentID(contentID);
 else     leftPos=heatMapWrapper.getLeftOverviewLinkPositionFromContentID(contentID);
    if (leftPos == null)     return;
    Vec2f rightPos;
    if (heatMapWrapper == leftHeatMapWrapper)     rightPos=heatMapWrapper.getLeftDetailLinkPositionFromContentID(contentID);
 else     rightPos=heatMapWrapper.getRightDetailLinkPositionFromContentID(contentID);
    if (rightPos == null)     return;
    if (xOffset == 0) {
      for (      Pair<Float,Integer> cluseterToXOffset : sortedClustersXOffsetUp) {
        if (contentID.equals(cluseterToXOffset.getSecond())) {
          xOffset=(rightPos.x() - leftPos.x()) * -((float)sortedClustersXOffsetUp.indexOf(cluseterToXOffset) + 1) / (sortedClustersXOffsetUp.size() + 1);
          break;
        }
      }
      for (      Pair<Float,Integer> cluseterToXOffset : sortedClustersXOffsetDown) {
        if (contentID.equals(cluseterToXOffset.getSecond())) {
          xOffset=(rightPos.x() - leftPos.x()) * -((float)sortedClustersXOffsetDown.indexOf(cluseterToXOffset) + 1) / (sortedClustersXOffsetDown.size() + 1);
          break;
        }
      }
    }
    if (xOffset == 0)     continue;
    ArrayList<Vec3f> points=new ArrayList<Vec3f>();
    points.add(new Vec3f(leftPos.x(),leftPos.y(),0));
    points.add(new Vec3f(rightPos.x() + xOffset,leftPos.y(),0));
    points.add(new Vec3f(rightPos.x() + xOffset / 1.5f,rightPos.y(),0));
    points.add(new Vec3f(rightPos.x(),rightPos.y(),0));
    NURBSCurve curve=new NURBSCurve(points,30);
    points=curve.getCurvePoints();
    gl.glPushName(pickingManager.getPickingID(iUniqueID,EPickingType.POLYLINE_SELECTION,contentID));
    gl.glBegin(GL.GL_LINE_STRIP);
    for (int i=0; i < points.size(); i++)     gl.glVertex3f(points.get(i).x(),points.get(i).y(),0.001f);
    gl.glEnd();
    gl.glPopName();
  }
}