Program: 58639
Project: 58639
Buggy source:
@Override public void draw(float fXCenter,float fYCenter,GL gl,GLU glu,double dTimePassed){
  PartialDisc pdCurrentSelectedElement=radialHierarchy.getCurrentSelectedElement();
  PartialDisc pdCurrentRootElement=radialHierarchy.getCurrentRootElement();
  if (!bAnimationStarted) {
    initAnimationFirstPart(fXCenter,fYCenter,pdCurrentSelectedElement,pdCurrentRootElement);
    iAnimationPart=1;
    bAnimationStarted=true;
    radialHierarchy.setAnimationActive(true);
  }
  moveValues(dTimePassed);
  gl.glLoadIdentity();
  gl.glTranslatef(fXCenter,fYCenter,0);
  pdCurrentRootElement.setPDDrawingStrategyChildren(DrawingStrategyManager.get().getDefaultDrawingStrategy(),iDisplayedOverviewDepth);
  pdCurrentSelectedElement.setPDDrawingStrategyChildren(DrawingStrategyManager.get().getDrawingStrategy(EPDDrawingStrategyType.INVISIBLE),iDisplayedDetailViewDepth);
  pdCurrentRootElement.drawHierarchyFull(gl,glu,mvOverviewWidth.getMovementValue(),iDisplayedOverviewDepth);
  pdCurrentSelectedElement.setPDDrawingStrategyChildren(DrawingStrategyManager.get().getDefaultDrawingStrategy(),iDisplayedDetailViewDepth);
  if (iAnimationPart == 1) {
    pdCurrentSelectedElement.drawHierarchyAngular(gl,glu,mvDetailViewWidth.getMovementValue(),iDisplayedDetailViewDepth,pdCurrentSelectedElement.getCurrentStartAngle(),pdCurrentSelectedElement.getCurrentAngle(),mvDetailViewInnerRadius.getMovementValue());
  }
 else {
    pdCurrentSelectedElement.drawHierarchyAngular(gl,glu,mvDetailViewWidth.getMovementValue(),iDisplayedDetailViewDepth,mvDetailViewStartAngle.getMovementValue(),mvDetailViewAngle.getMovementValue(),mvDetailViewInnerRadius.getMovementValue());
  }
  if (haveMovementValuesReachedTargets()) {
    iAnimationPart++;
    if (iAnimationPart == 2) {
      initAnimationSecondPart(fXCenter,fYCenter,pdCurrentSelectedElement,pdCurrentRootElement);
    }
    if (iAnimationPart > 2) {
      bAnimationStarted=false;
    }
  }
  if (!bAnimationStarted) {
    ADrawingState dsNext=drawingController.getDrawingState(EDrawingStateType.DRAWING_STATE_DETAIL_OUTSIDE);
    drawingController.setDrawingState(dsNext);
    radialHierarchy.setAnimationActive(false);
    navigationHistory.addNewHistoryEntry(dsNext,pdCurrentRootElement,pdCurrentSelectedElement,radialHierarchy.getMaxDisplayedHierarchyDepth());
    radialHierarchy.setNewSelection(ESelectionType.SELECTION,pdCurrentSelectedElement,pdCurrentRootElement);
    radialHierarchy.setDisplayListDirty();
  }
}

Fixed version (ground truth):
@Override public void draw(float fXCenter,float fYCenter,GL gl,GLU glu,double dTimePassed){
  PartialDisc pdCurrentSelectedElement=radialHierarchy.getCurrentSelectedElement();
  PartialDisc pdCurrentRootElement=radialHierarchy.getCurrentRootElement();
  if (!bAnimationStarted) {
    initAnimationFirstPart(fXCenter,fYCenter,pdCurrentSelectedElement,pdCurrentRootElement);
    iAnimationPart=1;
    bAnimationStarted=true;
    radialHierarchy.setAnimationActive(true);
  }
  moveValues(dTimePassed);
  gl.glPushMatrix();
  gl.glLoadIdentity();
  gl.glTranslatef(fXCenter,fYCenter,0);
  pdCurrentRootElement.setPDDrawingStrategyChildren(DrawingStrategyManager.get().getDefaultDrawingStrategy(),iDisplayedOverviewDepth);
  pdCurrentSelectedElement.setPDDrawingStrategyChildren(DrawingStrategyManager.get().getDrawingStrategy(EPDDrawingStrategyType.INVISIBLE),iDisplayedDetailViewDepth);
  pdCurrentRootElement.drawHierarchyFull(gl,glu,mvOverviewWidth.getMovementValue(),iDisplayedOverviewDepth);
  pdCurrentSelectedElement.setPDDrawingStrategyChildren(DrawingStrategyManager.get().getDefaultDrawingStrategy(),iDisplayedDetailViewDepth);
  if (iAnimationPart == 1) {
    pdCurrentSelectedElement.drawHierarchyAngular(gl,glu,mvDetailViewWidth.getMovementValue(),iDisplayedDetailViewDepth,pdCurrentSelectedElement.getCurrentStartAngle(),pdCurrentSelectedElement.getCurrentAngle(),mvDetailViewInnerRadius.getMovementValue());
  }
 else {
    pdCurrentSelectedElement.drawHierarchyAngular(gl,glu,mvDetailViewWidth.getMovementValue(),iDisplayedDetailViewDepth,mvDetailViewStartAngle.getMovementValue(),mvDetailViewAngle.getMovementValue(),mvDetailViewInnerRadius.getMovementValue());
  }
  if (haveMovementValuesReachedTargets()) {
    iAnimationPart++;
    if (iAnimationPart == 2) {
      initAnimationSecondPart(fXCenter,fYCenter,pdCurrentSelectedElement,pdCurrentRootElement);
    }
    if (iAnimationPart > 2) {
      bAnimationStarted=false;
    }
  }
  if (!bAnimationStarted) {
    ADrawingState dsNext=drawingController.getDrawingState(EDrawingStateType.DRAWING_STATE_DETAIL_OUTSIDE);
    drawingController.setDrawingState(dsNext);
    radialHierarchy.setAnimationActive(false);
    navigationHistory.addNewHistoryEntry(dsNext,pdCurrentRootElement,pdCurrentSelectedElement,radialHierarchy.getMaxDisplayedHierarchyDepth());
    radialHierarchy.setNewSelection(ESelectionType.SELECTION,pdCurrentSelectedElement,pdCurrentRootElement);
    radialHierarchy.setDisplayListDirty();
  }
  gl.glPopMatrix();
}