Program: 146848
Project: 146848
Buggy source:
public void populate(TreeElement incoming,FormDef f){
  if (this.isLeaf()) {
    IAnswerData value=incoming.getValue();
    if (value == null) {
      this.setValue(null);
    }
 else {
      this.setValue(AnswerDataFactory.templateByDataType(this.dataType).cast(value.uncast()));
    }
  }
 else {
    Vector names=new Vector();
    for (int i=0; i < this.getNumChildren(); i++) {
      TreeElement child=this.getChildAt(i);
      if (!names.contains(child.getName())) {
        names.addElement(child.getName());
      }
    }
    for (int i=0; i < this.getNumChildren(); i++) {
      TreeElement child=this.getChildAt(i);
      if (child.getMaskVar(MASK_REPEATABLE) && child.getMult() != TreeReference.INDEX_TEMPLATE) {
        this.removeChildAt(i);
        i--;
      }
    }
    if (this.getNumChildren() != names.size()) {
      throw new RuntimeException("String_Node_Str");
    }
    for (int i=0; i < this.getNumChildren(); i++) {
      TreeElement child=this.getChildAt(i);
      String expectedName=(String)names.elementAt(i);
      if (!child.getName().equals(expectedName)) {
        TreeElement child2=null;
        int j;
        for (j=i + 1; j < this.getNumChildren(); j++) {
          child2=this.getChildAt(j);
          if (child2.getName().equals(expectedName)) {
            break;
          }
        }
        if (j == this.getNumChildren()) {
          throw new RuntimeException("String_Node_Str");
        }
        this.removeChildAt(j);
        if (children == null) {
          children=new Vector();
        }
        this.children.insertElementAt(child2,i);
      }
    }
    for (int i=0; i < this.getNumChildren(); i++) {
      TreeElement child=this.getChildAt(i);
      Vector newChildren=incoming.getChildrenWithName(child.getName());
      if (child.getMaskVar(MASK_REPEATABLE)) {
        for (int k=0; k < newChildren.size(); k++) {
          TreeElement newChild=child.deepCopy(true);
          newChild.setMult(k);
          if (children == null) {
            children=new Vector();
          }
          this.children.insertElementAt(newChild,i + k + 1);
          newChild.populate((TreeElement)newChildren.elementAt(k),f);
        }
        i+=newChildren.size();
      }
 else {
        if (newChildren.size() == 0) {
          child.setRelevant(false);
        }
 else {
          child.populate((TreeElement)newChildren.elementAt(0),f);
        }
      }
    }
  }
}

Fixed version (ground truth):
public void populate(TreeElement incoming,FormDef f){
  if (this.isLeaf()) {
    IAnswerData value=incoming.getValue();
    if (value == null) {
      this.setValue(null);
    }
 else {
      this.setValue(AnswerDataFactory.templateByDataType(this.dataType).cast(value.uncast()));
    }
  }
 else {
    Vector names=new Vector();
    for (int i=0; i < this.getNumChildren(); i++) {
      TreeElement child=this.getChildAt(i);
      if (!names.contains(child.getName())) {
        names.addElement(child.getName());
      }
    }
    for (int i=0; i < this.getNumChildren(); i++) {
      TreeElement child=this.getChildAt(i);
      if (child.getMaskVar(MASK_REPEATABLE) && child.getMult() != TreeReference.INDEX_TEMPLATE) {
        this.removeChildAt(i);
        i--;
      }
    }
    if (this.getNumChildren() != names.size()) {
      throw new RuntimeException("String_Node_Str");
    }
    for (int i=0; i < this.getNumChildren(); i++) {
      TreeElement child=this.getChildAt(i);
      String expectedName=(String)names.elementAt(i);
      if (!child.getName().equals(expectedName)) {
        TreeElement child2=null;
        int j;
        for (j=i + 1; j < this.getNumChildren(); j++) {
          child2=this.getChildAt(j);
          if (child2.getName().equals(expectedName)) {
            break;
          }
        }
        if (j == this.getNumChildren()) {
          throw new RuntimeException("String_Node_Str");
        }
        this.removeChildAt(j);
        if (children == null) {
          children=new Vector();
        }
        this.children.insertElementAt(child2,i);
      }
    }
    for (int i=0; i < this.getNumChildren(); i++) {
      TreeElement child=this.getChildAt(i);
      Vector newChildren=incoming.getChildrenWithName(child.getName());
      if (child.getMaskVar(MASK_REPEATABLE)) {
        for (int k=0; k < newChildren.size(); k++) {
          TreeElement newChild=child.deepCopy(true);
          newChild.setMult(k);
          if (children == null) {
            children=new Vector();
          }
          this.children.insertElementAt(newChild,i + k + 1);
          newChild.populate((TreeElement)newChildren.elementAt(k),f);
        }
        i+=newChildren.size();
      }
 else {
        if (newChildren.size() == 0) {
          child.setRelevant(false);
        }
 else {
          child.populate((TreeElement)newChildren.elementAt(0),f);
        }
      }
    }
    for (int i=0; i < incoming.getAttributeCount(); i++) {
      String name=incoming.getAttributeName(i);
      String ns=incoming.getAttributeNamespace(i);
      String value=incoming.getAttributeValue(i);
      this.setAttribute(ns,name,value);
    }
  }
}