Program: 125494
Project: 125494
Buggy source:
public static FOXTreeNode cloneATreeNode(ATreeNode treeNode,String currentPath,boolean isXsd){
  FOXTreeNode node=null;
  if (treeNode.getType() == ATreeNode.ATTRIBUTE_TYPE) {
    node=new Attribute();
  }
 else {
    node=new Element();
  }
  if (treeNode.getType() == ATreeNode.NAMESPACE_TYPE) {
    node=new NameSpaceNode();
    node.setLabel(treeNode.getDataType());
    node.setDefaultValue((String)treeNode.getValue());
  }
 else {
    node.setLabel(treeNode.getValue().toString());
    node.setChoice(treeNode.isChoice());
    node.setSubstitution(treeNode.isSubstitution());
    node.setOptional(treeNode.isOptional());
    node.getUniqueNames().clear();
    node.getUniqueNames().addAll(treeNode.getUniqueNames());
  }
  if (isXsd) {
    MappingTypeRetriever retriever=MetadataTalendType.getMappingTypeRetriever("String_Node_Str");
    String originalDataType=treeNode.getOriginalDataType();
    if (originalDataType != null && !originalDataType.startsWith("String_Node_Str")) {
      originalDataType="String_Node_Str" + originalDataType;
    }
    node.setDataType(retriever.getDefaultSelectedTalendType(originalDataType));
  }
 else {
    node.setDataType(treeNode.getDataType());
  }
  node.setDataMaxLength(treeNode.getDataMaxLength());
  node.setPrecisionValue(treeNode.getPrecisionValue());
  Object[] children=treeNode.getChildren();
  if (children != null) {
    for (    Object element : children) {
      if (element instanceof ATreeNode) {
        ATreeNode child=(ATreeNode)element;
        String newPath=currentPath + "String_Node_Str";
        if (child.getValue() instanceof String) {
          String elementName=(String)child.getValue() + "String_Node_Str" + child.getDataType()+ "String_Node_Str";
          if (currentPath.contains("String_Node_Str" + elementName + "String_Node_Str") && isXsd) {
            continue;
          }
          newPath+=elementName;
        }
 else {
          newPath+="String_Node_Str";
        }
        FOXTreeNode foxChild=cloneATreeNode(child,newPath,isXsd);
        node.addChild(foxChild);
      }
    }
  }
  return node;
}

Fixed version (ground truth):
public static FOXTreeNode cloneATreeNode(ATreeNode aNode,boolean isXsd){
  List<ATreeNode> aNodes=NodeCreationObserver.getList();
  FOXTreeNode rootFNode=null;
  for (int i=0; i < aNodes.size(); i++) {
    ATreeNode treeNode=aNodes.get(i);
    if (isXsd && treeNode.getValue() instanceof String) {
      String currentPath=treeNode.getValue() + "String_Node_Str" + treeNode.getDataType()+ "String_Node_Str";
      if (treeNode.getParent() != null) {
        String parentPath="String_Node_Str" + treeNode.getParent().getValue() + "String_Node_Str"+ treeNode.getParent().getDataType()+ "String_Node_Str";
        if (parentPath.contains("String_Node_Str" + currentPath + "String_Node_Str")) {
          continue;
        }
      }
    }
    FOXTreeNode node=null;
    if (treeNode.getType() == ATreeNode.ATTRIBUTE_TYPE) {
      node=new Attribute();
    }
 else {
      node=new Element();
    }
    if (treeNode.getType() == ATreeNode.NAMESPACE_TYPE) {
      node=new NameSpaceNode();
      node.setLabel(treeNode.getDataType());
      node.setDefaultValue((String)treeNode.getValue());
    }
 else {
      node.setLabel(treeNode.getValue() == null ? null : treeNode.getValue().toString());
      node.setChoice(treeNode.isChoice());
      node.setSubstitution(treeNode.isSubstitution());
      node.setOptional(treeNode.isOptional());
      node.getUniqueNames().clear();
      node.getUniqueNames().addAll(treeNode.getUniqueNames());
    }
    if (isXsd) {
      MappingTypeRetriever retriever=MetadataTalendType.getMappingTypeRetriever("String_Node_Str");
      String originalDataType=treeNode.getOriginalDataType();
      if (originalDataType != null && !originalDataType.startsWith("String_Node_Str")) {
        originalDataType="String_Node_Str" + originalDataType;
      }
      node.setDataType(retriever.getDefaultSelectedTalendType(originalDataType));
    }
 else {
      node.setDataType(treeNode.getDataType());
    }
    node.setDataMaxLength(treeNode.getDataMaxLength());
    node.setPrecisionValue(treeNode.getPrecisionValue());
    if (treeNode.getFoxTreeNode() == null) {
      treeNode.setFoxTreeNode(node);
    }
    if (treeNode.getParent() != null && treeNode.getParent().getFoxTreeNode() != null) {
      ((FOXTreeNode)treeNode.getParent().getFoxTreeNode()).addChild(node);
    }
  }
  for (  ATreeNode treeNode : aNodes) {
    FOXTreeNode fNode=(FOXTreeNode)treeNode.getFoxTreeNode();
    if (treeNode.getParent() != null && fNode.getParent() == null) {
      ((FOXTreeNode)treeNode.getParent().getFoxTreeNode()).addChild(fNode);
    }
  }
  rootFNode=(FOXTreeNode)aNode.getFoxTreeNode();
  return rootFNode;
}