Program: 123320
Project: 123320
Buggy source:
private void prepareModelFromOutput(List<XMLFileNode> root,List<XMLFileNode> loop,List<XMLFileNode> group){
  TreeNode rootNode=null;
  TreeNode lastTreeNode=parentNode;
  TreeNode temp=null;
  TreeNode mainNode=parentNode;
  String mainPath=null;
  String lastXmlPath=null;
  for (int i=0; i < root.size(); i++) {
    XMLFileNode node=(XMLFileNode)root.get(i);
    String newPath=node.getXMLPath();
    String type=node.getType();
    if (node.getAttribute().equals("String_Node_Str")) {
      temp=createModel();
      temp.setName(newPath);
      temp.setDefaultValue(node.getDefaultValue());
      temp.setNodeType(NodeType.ATTRIBUT);
      temp.setXpath(XmlMapUtil.getXPath(lastTreeNode.getXpath(),temp.getName(),temp.getNodeType()));
      lastTreeNode.getChildren().add(temp);
    }
 else     if (node.getAttribute().equals("String_Node_Str")) {
      temp=createModel();
      temp.setName(newPath);
      temp.setDefaultValue(node.getDefaultValue());
      temp.setNodeType(NodeType.NAME_SPACE);
      temp.setXpath(XmlMapUtil.getXPath(lastTreeNode.getXpath(),temp.getName(),temp.getNodeType()));
      lastTreeNode.getChildren().add(temp);
    }
 else {
      temp=this.addElement(lastTreeNode,lastXmlPath,node);
      if (rootNode == null) {
        rootNode=temp;
      }
      if (node.getAttribute().equals("String_Node_Str")) {
        mainNode=temp;
        mainPath=newPath;
      }
      lastTreeNode=temp;
      lastXmlPath=newPath;
    }
    if (type == null) {
      type=JavaTypesManager.getDefaultJavaType().getId();
    }
    temp.setType(type);
  }
  lastTreeNode=mainNode;
  lastXmlPath=mainPath;
  List<TreeNode> groupElements=new ArrayList<TreeNode>();
  boolean isFirst=true;
  for (int i=0; i < group.size(); i++) {
    XMLFileNode node=(XMLFileNode)group.get(i);
    String newPath=node.getXMLPath();
    String type=node.getType();
    if (node.getAttribute().equals("String_Node_Str")) {
      temp=createModel();
      temp.setName(newPath);
      temp.setDefaultValue(node.getDefaultValue());
      temp.setNodeType(NodeType.ATTRIBUT);
      temp.setXpath(XmlMapUtil.getXPath(lastTreeNode.getXpath(),temp.getName(),temp.getNodeType()));
      lastTreeNode.getChildren().add(temp);
    }
 else     if (node.getAttribute().equals("String_Node_Str")) {
      temp=createModel();
      temp.setName(newPath);
      temp.setDefaultValue(node.getDefaultValue());
      temp.setNodeType(NodeType.NAME_SPACE);
      temp.setXpath(XmlMapUtil.getXPath(lastTreeNode.getXpath(),temp.getName(),temp.getNodeType()));
      lastTreeNode.getChildren().add(temp);
    }
 else {
      temp=this.addElement(lastTreeNode,lastXmlPath,node);
      if (node.getAttribute().equals("String_Node_Str")) {
        mainNode=temp;
        mainPath=newPath;
      }
      if (isFirst) {
        temp.setGroup(true);
        isFirst=false;
      }
      lastTreeNode=temp;
      lastXmlPath=newPath;
      groupElements.add(temp);
    }
    if (type == null) {
      type=JavaTypesManager.getDefaultJavaType().getId();
    }
    temp.setType(type);
  }
  lastTreeNode=mainNode;
  lastXmlPath=mainPath;
  isFirst=true;
  TreeNode loopElement=null;
  for (int i=0; i < loop.size(); i++) {
    XMLFileNode node=(XMLFileNode)loop.get(i);
    String newPath=node.getXMLPath();
    String type=node.getType();
    if (node.getAttribute().equals("String_Node_Str")) {
      temp=createModel();
      temp.setName(newPath);
      temp.setDefaultValue(node.getDefaultValue());
      temp.setNodeType(NodeType.ATTRIBUT);
      temp.setXpath(XmlMapUtil.getXPath(lastTreeNode.getXpath(),temp.getName(),temp.getNodeType()));
      lastTreeNode.getChildren().add(temp);
    }
 else     if (node.getAttribute().equals("String_Node_Str")) {
      temp=createModel();
      temp.setName(newPath);
      temp.setDefaultValue(node.getDefaultValue());
      temp.setNodeType(NodeType.NAME_SPACE);
      temp.setXpath(XmlMapUtil.getXPath(lastTreeNode.getXpath(),temp.getName(),temp.getNodeType()));
      lastTreeNode.getChildren().add(temp);
    }
 else {
      temp=this.addElement(lastTreeNode,lastXmlPath,node);
      if (rootNode == null) {
        rootNode=temp;
      }
      if (node.getAttribute().equals("String_Node_Str")) {
        mainNode=temp;
        mainPath=newPath;
      }
      if (isFirst) {
        temp.setLoop(true);
        XmlMapUtil.upsetMainNode(temp);
        loopElement=temp;
        isFirst=false;
      }
      lastTreeNode=temp;
      lastXmlPath=newPath;
    }
    if (type == null) {
      type=JavaTypesManager.getDefaultJavaType().getId();
    }
    temp.setType(type);
  }
  if (loopElement != null && !groupElements.isEmpty()) {
    fillGroup(loopElement,groupElements);
  }
  if (rootNode != null) {
    parentNode.getChildren().add(rootNode);
  }
}

Fixed version (ground truth):
private void prepareModelFromOutput(List<XMLFileNode> root,List<XMLFileNode> loop,List<XMLFileNode> group){
  TreeNode rootNode=null;
  TreeNode lastTreeNode=schemaNode;
  TreeNode temp=null;
  TreeNode mainNode=schemaNode;
  String mainPath=null;
  String lastXmlPath=null;
  for (int i=0; i < root.size(); i++) {
    XMLFileNode node=(XMLFileNode)root.get(i);
    String newPath=node.getXMLPath();
    String type=node.getType();
    if (node.getAttribute().equals("String_Node_Str")) {
      temp=createModel();
      temp.setName(newPath);
      temp.setDefaultValue(node.getDefaultValue());
      temp.setNodeType(NodeType.ATTRIBUT);
      temp.setXpath(XmlMapUtil.getXPath(lastTreeNode.getXpath(),temp.getName(),temp.getNodeType()));
      lastTreeNode.getChildren().add(temp);
    }
 else     if (node.getAttribute().equals("String_Node_Str")) {
      temp=createModel();
      temp.setName(newPath);
      temp.setDefaultValue(node.getDefaultValue());
      temp.setNodeType(NodeType.NAME_SPACE);
      temp.setXpath(XmlMapUtil.getXPath(lastTreeNode.getXpath(),temp.getName(),temp.getNodeType()));
      lastTreeNode.getChildren().add(temp);
    }
 else {
      temp=this.addElement(lastTreeNode,lastXmlPath,node);
      if (rootNode == null) {
        rootNode=temp;
      }
      if (node.getAttribute().equals("String_Node_Str")) {
        mainNode=temp;
        mainPath=newPath;
      }
      lastTreeNode=temp;
      lastXmlPath=newPath;
    }
    if (type == null) {
      type=JavaTypesManager.getDefaultJavaType().getId();
    }
    temp.setType(type);
  }
  lastTreeNode=mainNode;
  lastXmlPath=mainPath;
  List<TreeNode> groupElements=new ArrayList<TreeNode>();
  boolean isFirst=true;
  for (int i=0; i < group.size(); i++) {
    XMLFileNode node=(XMLFileNode)group.get(i);
    String newPath=node.getXMLPath();
    String type=node.getType();
    if (node.getAttribute().equals("String_Node_Str")) {
      temp=createModel();
      temp.setName(newPath);
      temp.setDefaultValue(node.getDefaultValue());
      temp.setNodeType(NodeType.ATTRIBUT);
      temp.setXpath(XmlMapUtil.getXPath(lastTreeNode.getXpath(),temp.getName(),temp.getNodeType()));
      lastTreeNode.getChildren().add(temp);
    }
 else     if (node.getAttribute().equals("String_Node_Str")) {
      temp=createModel();
      temp.setName(newPath);
      temp.setDefaultValue(node.getDefaultValue());
      temp.setNodeType(NodeType.NAME_SPACE);
      temp.setXpath(XmlMapUtil.getXPath(lastTreeNode.getXpath(),temp.getName(),temp.getNodeType()));
      lastTreeNode.getChildren().add(temp);
    }
 else {
      temp=this.addElement(lastTreeNode,lastXmlPath,node);
      if (node.getAttribute().equals("String_Node_Str")) {
        mainNode=temp;
        mainPath=newPath;
      }
      if (isFirst) {
        temp.setGroup(true);
        isFirst=false;
      }
      lastTreeNode=temp;
      lastXmlPath=newPath;
      groupElements.add(temp);
    }
    if (type == null) {
      type=JavaTypesManager.getDefaultJavaType().getId();
    }
    temp.setType(type);
  }
  lastTreeNode=mainNode;
  lastXmlPath=mainPath;
  isFirst=true;
  TreeNode loopElement=null;
  for (int i=0; i < loop.size(); i++) {
    XMLFileNode node=(XMLFileNode)loop.get(i);
    String newPath=node.getXMLPath();
    String type=node.getType();
    if (node.getAttribute().equals("String_Node_Str")) {
      temp=createModel();
      temp.setName(newPath);
      temp.setDefaultValue(node.getDefaultValue());
      temp.setNodeType(NodeType.ATTRIBUT);
      temp.setXpath(XmlMapUtil.getXPath(lastTreeNode.getXpath(),temp.getName(),temp.getNodeType()));
      lastTreeNode.getChildren().add(temp);
    }
 else     if (node.getAttribute().equals("String_Node_Str")) {
      temp=createModel();
      temp.setName(newPath);
      temp.setDefaultValue(node.getDefaultValue());
      temp.setNodeType(NodeType.NAME_SPACE);
      temp.setXpath(XmlMapUtil.getXPath(lastTreeNode.getXpath(),temp.getName(),temp.getNodeType()));
      lastTreeNode.getChildren().add(temp);
    }
 else {
      temp=this.addElement(lastTreeNode,lastXmlPath,node);
      if (rootNode == null) {
        rootNode=temp;
      }
      if (node.getAttribute().equals("String_Node_Str")) {
        mainNode=temp;
        mainPath=newPath;
      }
      if (isFirst) {
        temp.setLoop(true);
        XmlMapUtil.upsetMainNode(temp);
        loopElement=temp;
        isFirst=false;
      }
      lastTreeNode=temp;
      lastXmlPath=newPath;
    }
    if (type == null) {
      type=JavaTypesManager.getDefaultJavaType().getId();
    }
    temp.setType(type);
  }
  if (loopElement != null && !groupElements.isEmpty()) {
    fillGroup(loopElement,groupElements);
  }
  if (rootNode != null) {
    schemaNode.getChildren().add(rootNode);
  }
}