Program: 93015
Project: 93015
Buggy source:
public void drawFromBottomToTop(int level,int height,int MaxLevelPixelWidth){
  if (level == 0 || level < topLevelToDraw) {
    return;
  }
  int total=levels.get(level).remove(0);
  int count=1;
  for (int i=0; i < levels.get(level).size(); i++) {
    int id=levels.get(level).get(i);
    if (collapse_mode && nodeDataMap.get(id).isPartOfCollapsedNode()) {
      continue;
    }
    if (!collapse_mode && nodeDataMap.get(id).isCollapsed)     continue;
    if (nodeMap.get(id) == null) {
      nodeMap.put(id,getNodeData(id).makeNode(this));
    }
    StapNode n=nodeMap.get(id);
    n.setVisible(true);
    n.setSize(n.getSize().width / scale,n.getSize().height / scale);
    if (getAnimationMode() == CONSTANT_ANIMATION_SLOW) {
      if (counter <= ANIMATION_TIME)       Animation.markBegin();
      n.setLocation(150 + (nodeMap.get(getRootVisibleNodeNumber()).getLocation().x),nodeMap.get(getRootVisibleNodeNumber()).getLocation().y);
      n.setLocation(150 + (MaxLevelPixelWidth / (total + 1) * count),height);
      if (counter <= ANIMATION_TIME) {
        Animation.run(ANIMATION_TIME / nodeMap.size() / 3);
        counter+=ANIMATION_TIME / nodeMap.size();
      }
    }
 else {
      n.setLocation(150 + (MaxLevelPixelWidth / (total + 1) * count),height);
    }
    if (level == bottomLevelToDraw && nodeDataMap.get(id).children.size() != 0) {
      n.setBackgroundColor(CONSTANT_HAS_CHILDREN);
    }
    if (getNodeData(n.id).isMarked())     n.setBackgroundColor(CONSTANT_MARKED);
    List<Integer> setOfCallees=null;
    if (collapse_mode)     setOfCallees=nodeDataMap.get(id).collapsedChildren;
 else     setOfCallees=nodeDataMap.get(id).children;
    for (    int val : setOfCallees) {
      if (nodeMap.get(val) != null)       nodeMap.get(val).makeConnection(SWT.NONE,n,nodeDataMap.get(val).timesCalled);
    }
    count++;
  }
  drawFromBottomToTop(level - 1,height - (3 * (int)(CONSTANT_VERTICAL_INCREMENT / scale)),MaxLevelPixelWidth);
}

Fixed version (ground truth):
public void drawFromBottomToTop(int level,int height,int MaxLevelPixelWidth){
  if (level == 0 || level < topLevelToDraw) {
    return;
  }
  int total=levels.get(level).remove(0);
  int count=1;
  for (int i=0; i < levels.get(level).size(); i++) {
    int id=levels.get(level).get(i);
    StapData data=nodeDataMap.get(id);
    if (!data.isOnlyChildWithThisName()) {
      if (collapse_mode && data.isPartOfCollapsedNode()) {
        continue;
      }
      if (!collapse_mode && nodeDataMap.get(id).isCollapsed)       continue;
    }
    if (nodeMap.get(id) == null) {
      nodeMap.put(id,getNodeData(id).makeNode(this));
    }
    StapNode n=nodeMap.get(id);
    n.setVisible(true);
    n.setSize(n.getSize().width / scale,n.getSize().height / scale);
    if (getAnimationMode() == CONSTANT_ANIMATION_SLOW) {
      if (counter <= ANIMATION_TIME)       Animation.markBegin();
      n.setLocation(150 + (nodeMap.get(getRootVisibleNodeNumber()).getLocation().x),nodeMap.get(getRootVisibleNodeNumber()).getLocation().y);
      n.setLocation(150 + (MaxLevelPixelWidth / (total + 1) * count),height);
      if (counter <= ANIMATION_TIME) {
        Animation.run(ANIMATION_TIME / nodeMap.size() / 3);
        counter+=ANIMATION_TIME / nodeMap.size();
      }
    }
 else {
      n.setLocation(150 + (MaxLevelPixelWidth / (total + 1) * count),height);
    }
    if (level == bottomLevelToDraw && nodeDataMap.get(id).children.size() != 0) {
      n.setBackgroundColor(CONSTANT_HAS_CHILDREN);
    }
    if (getNodeData(n.id).isMarked())     n.setBackgroundColor(CONSTANT_MARKED);
    List<Integer> setOfCallees=null;
    if (collapse_mode)     setOfCallees=nodeDataMap.get(id).collapsedChildren;
 else     setOfCallees=nodeDataMap.get(id).children;
    for (    int val : setOfCallees) {
      if (nodeMap.get(val) != null)       nodeMap.get(val).makeConnection(SWT.NONE,n,nodeDataMap.get(val).timesCalled);
    }
    count++;
  }
  drawFromBottomToTop(level - 1,height - (3 * (int)(CONSTANT_VERTICAL_INCREMENT / scale)),MaxLevelPixelWidth);
}