Program: 58598
Project: 58598
Buggy source:
public float calculateRecursiveLayout(IDrawAbleNode node,float fRadius,float fParentAngle,int fLayer,float fNodeSize,float fXCoordOfParent,float fYCoordOfParent){
  if (fLayer <= fDepth) {
    float fRadiusUpdate=0;
    if (tree.hasChildren(node)) {
      ArrayList<IDrawAbleNode> childsOfCurrentNode=new ArrayList<IDrawAbleNode>();
      childsOfCurrentNode=tree.getChildren(node);
      float fDeltaRadius=fRadius;
      float fNumberOfChildsOfNode=childsOfCurrentNode.size();
      float fChildSpace=(fDeltaRadius * (float)Math.PI) / (fNumberOfChildsOfNode + 1);
      float fChildCount=0.0f;
      float fChildAngle=0.0f;
      for (      IDrawAbleNode tmpChild : childsOfCurrentNode) {
        fChildCount++;
        fChildAngle=(calculateChildAngle(fParentAngle,fChildSpace,fDeltaRadius,fLayer - 1)) / (fLayer - 1);
        float fRealChildAngle=fParentAngle - ((fChildAngle * (fNumberOfChildsOfNode - 1)) / 2) + fChildAngle * (fChildCount - 1);
        calcualteChildPosition(fDeltaRadius,fRealChildAngle,fChildCount,fXCoordOfParent,fYCoordOfParent);
        float fXCoord1=fXCoord;
        float fYCoord2=fYCoord;
{
          fNodeSize=HyperbolicRenderStyle.MAX_NODE_SIZE * (float)Math.pow(HyperbolicRenderStyle.NODE_SCALING_PER_LAYER,fLayer + 1);
          tmpChild.setDetailLevel(EDrawAbleNodeDetailLevel.Low);
          placeNode(tmpChild,fXCoord1,fYCoord2,0.0f,fNodeSize,fNodeSize);
          placeConnection(node,tmpChild);
          calculateRecursiveLayout(tmpChild,fDeltaRadius,fRealChildAngle,fLayer + 1,fNodeSize,fXCoord,fYCoord);
        }
      }
    }
 else {
      fRadiusUpdate=fRadius * (float)Math.PI * (tree.getNumberOfElementsInLayer(fLayer) / 2) / tree.getChildren(tree.getParent(node)).size();
    }
  }
  return fLayer;
}

Fixed version (ground truth):
public float calculateRecursiveLayout(IDrawAbleNode node,float fRadius,float fParentAngle,int fLayer,float fNodeSize,float fXCoordOfParent,float fYCoordOfParent){
  float fRadiusUpdate=0;
  if (tree.hasChildren(node) && fLayer <= HyperbolicRenderStyle.MAX_DEPTH && fLayer <= fDepth) {
    ArrayList<IDrawAbleNode> childsOfCurrentNode=new ArrayList<IDrawAbleNode>();
    childsOfCurrentNode=tree.getChildren(node);
    float fDeltaRadius=fRadius;
    float fNumberOfChildsOfNode=childsOfCurrentNode.size();
    float fChildSpace=(fDeltaRadius * (float)Math.PI) / (fNumberOfChildsOfNode + 1);
    float fChildCount=0.0f;
    float fChildAngle=0.0f;
    for (    IDrawAbleNode tmpChild : childsOfCurrentNode) {
      fChildCount++;
      fChildAngle=(calculateChildAngle(fParentAngle,fChildSpace,fDeltaRadius,fLayer - 1)) / (fLayer - 1);
      float fRealChildAngle=fParentAngle - ((fChildAngle * (fNumberOfChildsOfNode - 1)) / 2) + fChildAngle * (fChildCount - 1);
      calcualteChildPosition(fDeltaRadius,fRealChildAngle,fChildCount,fXCoordOfParent,fYCoordOfParent);
      float fXCoord1=fXCoord;
      float fYCoord2=fYCoord;
{
        fNodeSize=HyperbolicRenderStyle.MAX_NODE_SIZE * (float)Math.pow(HyperbolicRenderStyle.NODE_SCALING_PER_LAYER,fLayer + 1);
        tmpChild.setDetailLevel(EDrawAbleNodeDetailLevel.Low);
        placeNode(tmpChild,fXCoord1,fYCoord2,0.0f,fNodeSize,fNodeSize);
        placeConnection(node,tmpChild);
        calculateRecursiveLayout(tmpChild,fDeltaRadius,fRealChildAngle,fLayer + 1,fNodeSize,fXCoord,fYCoord);
      }
    }
  }
 else {
    fRadiusUpdate=fRadius * (float)Math.PI * (tree.getNumberOfElementsInLayer(fLayer) / 2) / tree.getChildren(tree.getParent(node)).size();
  }
  return fLayer;
}