Program: 57701
Project: 57701
Buggy source:
private void buildDisplayList(final GL2 gl,int iGLDisplayListIndex){
  dataRowHeight=pixelGLConverter.getGLHeightForPixelHeight(DEFAULT_DATA_ROW_HEIGHT_PIXELS);
  gl.glNewList(iGLDisplayListIndex,GL2.GL_COMPILE);
  float branchColumnWidth=pixelGLConverter.getGLWidthForPixelWidth(BRANCH_COLUMN_WIDTH_PIXELS);
  float pathwayColumnWidth=pixelGLConverter.getGLWidthForPixelWidth(PATHWAY_COLUMN_WIDTH_PIXELS);
  GLU glu=new GLU();
  List<AnchorNodeSpacing> anchorNodeSpacings=calcAnchorNodeSpacings();
  Vec3f currentPosition=new Vec3f(branchColumnWidth + pathwayColumnWidth / 2.0f,viewFrustum.getHeight(),0.2f);
  float pathwayHeight=0;
  float minNodeSpacing=pixelGLConverter.getGLHeightForPixelHeight(MIN_NODE_SPACING_PIXELS);
  for (  AnchorNodeSpacing spacing : anchorNodeSpacings) {
    float currentAnchorNodeSpacing=spacing.getCurrentAnchorNodeSpacing();
    float nodeSpacing=(Float.isNaN(currentAnchorNodeSpacing) ? minNodeSpacing : (spacing.getCurrentAnchorNodeSpacing() - spacing.getTotalNodeHeight()) / ((float)spacing.getNodesInbetween().size() + 1));
    ANode startAnchorNode=spacing.getStartNode();
    float currentInbetweenNodePositionY=currentPosition.y() - ((startAnchorNode != null) ? startAnchorNode.getHeight() / 2.0f : 0);
    for (int i=0; i < spacing.getNodesInbetween().size(); i++) {
      ANode node=spacing.getNodesInbetween().get(i);
      node.setPosition(new Vec3f(currentPosition.x(),currentInbetweenNodePositionY - nodeSpacing - node.getHeight() / 2.0f,currentPosition.z()));
      node.render(gl,glu);
      currentInbetweenNodePositionY-=(nodeSpacing + node.getHeight());
      renderBranchNodes(gl,glu,node);
    }
    currentPosition.setY(currentPosition.y() - spacing.getCurrentAnchorNodeSpacing());
    ANode endAnchorNode=spacing.getEndNode();
    if (endAnchorNode != null) {
      endAnchorNode.setPosition(new Vec3f(currentPosition));
      endAnchorNode.render(gl,glu);
      renderBranchNodes(gl,glu,endAnchorNode);
    }
    pathwayHeight+=spacing.getCurrentAnchorNodeSpacing();
  }
  if (expandedBranchSummaryNode != null) {
    renderBranchSummaryNode(gl,glu,expandedBranchSummaryNode);
    float coverWidth=pixelGLConverter.getGLWidthForPixelWidth(PATHWAY_COLUMN_WIDTH_PIXELS + BRANCH_COLUMN_WIDTH_PIXELS);
    gl.glColor4f(1,1,1,0.9f);
    gl.glBegin(GL2.GL_QUADS);
    gl.glVertex3f(0,0,0.1f);
    gl.glVertex3f(coverWidth,0,0.1f);
    gl.glVertex3f(coverWidth,viewFrustum.getHeight(),0.1f);
    gl.glVertex3f(0,viewFrustum.getHeight(),0.1f);
    gl.glEnd();
  }
  int minViewHeightPixels=pixelGLConverter.getPixelHeightForGLHeight(pathwayHeight);
  if (minViewHeightPixels > parentGLCanvas.getHeight()) {
    setMinSize(minViewHeightPixels);
  }
  float dataRowPositionX=branchColumnWidth + pathwayColumnWidth;
  float topSpacing=pixelGLConverter.getGLWidthForPixelWidth(TOP_SPACING_MAPPED_DATA);
  gl.glPushMatrix();
  mappedDataRenderer.setLinearizedNodes(linearizedNodes);
  gl.glTranslatef(dataRowPositionX,topSpacing,0);
  mappedDataRenderer.render(gl);
  gl.glPopMatrix();
  renderEdgesOfLinearizedNodes(gl);
  gl.glEndList();
}

Fixed version (ground truth):
private void buildDisplayList(final GL2 gl,int iGLDisplayListIndex){
  dataRowHeight=pixelGLConverter.getGLHeightForPixelHeight(DEFAULT_DATA_ROW_HEIGHT_PIXELS);
  setMappedDataRendererGeometry();
  gl.glNewList(iGLDisplayListIndex,GL2.GL_COMPILE);
  float branchColumnWidth=pixelGLConverter.getGLWidthForPixelWidth(BRANCH_COLUMN_WIDTH_PIXELS);
  float pathwayColumnWidth=pixelGLConverter.getGLWidthForPixelWidth(PATHWAY_COLUMN_WIDTH_PIXELS);
  GLU glu=new GLU();
  List<AnchorNodeSpacing> anchorNodeSpacings=calcAnchorNodeSpacings();
  Vec3f currentPosition=new Vec3f(branchColumnWidth + pathwayColumnWidth / 2.0f,viewFrustum.getHeight(),0.2f);
  float pathwayHeight=0;
  float minNodeSpacing=pixelGLConverter.getGLHeightForPixelHeight(MIN_NODE_SPACING_PIXELS);
  for (  AnchorNodeSpacing spacing : anchorNodeSpacings) {
    float currentAnchorNodeSpacing=spacing.getCurrentAnchorNodeSpacing();
    float nodeSpacing=(Float.isNaN(currentAnchorNodeSpacing) ? minNodeSpacing : (spacing.getCurrentAnchorNodeSpacing() - spacing.getTotalNodeHeight()) / ((float)spacing.getNodesInbetween().size() + 1));
    ANode startAnchorNode=spacing.getStartNode();
    float currentInbetweenNodePositionY=currentPosition.y() - ((startAnchorNode != null) ? startAnchorNode.getHeight() / 2.0f : 0);
    for (int i=0; i < spacing.getNodesInbetween().size(); i++) {
      ANode node=spacing.getNodesInbetween().get(i);
      node.setPosition(new Vec3f(currentPosition.x(),currentInbetweenNodePositionY - nodeSpacing - node.getHeight() / 2.0f,currentPosition.z()));
      node.render(gl,glu);
      currentInbetweenNodePositionY-=(nodeSpacing + node.getHeight());
      renderBranchNodes(gl,glu,node);
    }
    currentPosition.setY(currentPosition.y() - spacing.getCurrentAnchorNodeSpacing());
    ANode endAnchorNode=spacing.getEndNode();
    if (endAnchorNode != null) {
      endAnchorNode.setPosition(new Vec3f(currentPosition));
      endAnchorNode.render(gl,glu);
      renderBranchNodes(gl,glu,endAnchorNode);
    }
    pathwayHeight+=spacing.getCurrentAnchorNodeSpacing();
  }
  if (expandedBranchSummaryNode != null) {
    renderBranchSummaryNode(gl,glu,expandedBranchSummaryNode);
    float coverWidth=pixelGLConverter.getGLWidthForPixelWidth(PATHWAY_COLUMN_WIDTH_PIXELS + BRANCH_COLUMN_WIDTH_PIXELS);
    gl.glColor4f(1,1,1,0.9f);
    gl.glBegin(GL2.GL_QUADS);
    gl.glVertex3f(0,0,0.1f);
    gl.glVertex3f(coverWidth,0,0.1f);
    gl.glVertex3f(coverWidth,viewFrustum.getHeight(),0.1f);
    gl.glVertex3f(0,viewFrustum.getHeight(),0.1f);
    gl.glEnd();
  }
  int minViewHeightPixels=pixelGLConverter.getPixelHeightForGLHeight(pathwayHeight);
  if (minViewHeightPixels > parentGLCanvas.getHeight()) {
    setMinSize(minViewHeightPixels);
  }
  float dataRowPositionX=branchColumnWidth + pathwayColumnWidth;
  float topSpacing=pixelGLConverter.getGLWidthForPixelWidth(TOP_SPACING_MAPPED_DATA);
  gl.glPushMatrix();
  mappedDataRenderer.setLinearizedNodes(linearizedNodes);
  gl.glTranslatef(dataRowPositionX,topSpacing,0);
  mappedDataRenderer.render(gl);
  gl.glPopMatrix();
  renderEdgesOfLinearizedNodes(gl);
  gl.glEndList();
}