Program: 130083
Project: 130083
Buggy source:
public ATreeNode getSchemaTree(XSDSchema xsdSchema,ATreeNode selectedNode,boolean includeAttribute2){
  List<ATreeNode> rootNodes=new ArrayList<ATreeNode>();
  prefixNumberGenerated=1;
  List all=new ArrayList(xsdSchema.getElementDeclarations());
  try {
    for (Iterator i=all.iterator(); i.hasNext(); ) {
      XSDElementDeclaration xsdElementDeclaration=(XSDElementDeclaration)i.next();
      String elementName=xsdElementDeclaration.getName();
      ATreeNode node=new ATreeNode();
      String prefix=null;
      String namespace=xsdElementDeclaration.getTargetNamespace();
      node.setCurrentNamespace(namespace);
      if (namespace != null) {
        prefix=xsdElementDeclaration.getQName().contains("String_Node_Str") ? xsdElementDeclaration.getQName().split("String_Node_Str")[0] : "String_Node_Str";
        if (isEnableGeneratePrefix() && (prefix == null || prefix.isEmpty())) {
          prefix="String_Node_Str" + prefixNumberGenerated;
          prefixNumberGenerated++;
        }
        if (prefix != null && !prefix.isEmpty()) {
          elementName=prefix + "String_Node_Str" + xsdElementDeclaration.getName();
          namespaceToPrefix.put(namespace,prefix);
        }
 else {
          ATreeNode namespaceNode=new ATreeNode();
          namespaceNode.setDataType("String_Node_Str");
          namespaceNode.setType(ATreeNode.NAMESPACE_TYPE);
          namespaceNode.setValue(namespace);
          node.addChild(namespaceNode);
        }
      }
      if (!elementName.equals(selectedNode.getValue())) {
        namespaceToPrefix.clear();
        prefixNumberGenerated=1;
        continue;
      }
      node.setValue(elementName);
      node.setType(ATreeNode.ELEMENT_TYPE);
      node.setDataType(xsdElementDeclaration.getName());
      XSDTypeDefinition xsdTypeDefinition=xsdElementDeclaration.getTypeDefinition();
      XSDComplexTypeDefinition generalType=xsdSchema.resolveComplexTypeDefinitionURI(xsdElementDeclaration.getURI());
      if (generalType.getContainer() != null) {
        xsdTypeDefinition=generalType;
      }
      if (xsdTypeDefinition != null && xsdTypeDefinition.getName() != null) {
        node.setDataType(xsdTypeDefinition.getName());
      }
      if (xsdTypeDefinition instanceof XSDComplexTypeDefinition) {
        addComplexTypeDetails(xsdSchema,node,xsdTypeDefinition,prefix,namespace,"String_Node_Str" + elementName + "String_Node_Str");
      }
      List<String> namespaceList=new ArrayList(namespaceToPrefix.keySet());
      Collections.reverse(namespaceList);
      for (      String currentNamespace : namespaceList) {
        ATreeNode namespaceNode=null;
        if (currentNamespace != null) {
          prefix=namespaceToPrefix.get(currentNamespace);
          namespaceNode=new ATreeNode();
          namespaceNode.setDataType(prefix);
          namespaceNode.setType(ATreeNode.NAMESPACE_TYPE);
          namespaceNode.setValue(currentNamespace);
          node.addAsFirstChild(namespaceNode);
        }
      }
      rootNodes.add(node);
      break;
    }
    if (rootNodes.isEmpty()) {
      all=new ArrayList(xsdSchema.getTypeDefinitions());
      for (Iterator i=all.iterator(); i.hasNext(); ) {
        XSDTypeDefinition xsdTypeDefinition=(XSDTypeDefinition)i.next();
        String elementName=xsdTypeDefinition.getQName();
        if (!elementName.equals(selectedNode.getValue())) {
          continue;
        }
        ATreeNode node=new ATreeNode();
        node.setValue(elementName);
        node.setType(ATreeNode.ELEMENT_TYPE);
        node.setDataType(xsdTypeDefinition.getName());
        XSDComplexTypeDefinition generalType=xsdSchema.resolveComplexTypeDefinitionURI(xsdTypeDefinition.getURI());
        if (generalType.getContainer() != null) {
          xsdTypeDefinition=generalType;
        }
        if (xsdTypeDefinition != null && xsdTypeDefinition.getName() != null) {
          node.setDataType(xsdTypeDefinition.getQName());
        }
        if (xsdTypeDefinition instanceof XSDComplexTypeDefinition) {
          String prefix=elementName.contains("String_Node_Str") ? elementName.split("String_Node_Str")[0] : "String_Node_Str";
          String namespace=xsdTypeDefinition.getTargetNamespace();
          addComplexTypeDetails(xsdSchema,node,xsdTypeDefinition,prefix,namespace,"String_Node_Str" + elementName + "String_Node_Str");
        }
        if (xsdTypeDefinition.getTargetNamespace() != null) {
          String prefix=namespaceToPrefix.get(xsdTypeDefinition.getTargetNamespace());
          if (prefix != null) {
            node.setValue(prefix + "String_Node_Str" + xsdTypeDefinition.getName());
          }
          node.setCurrentNamespace(xsdTypeDefinition.getTargetNamespace());
        }
        List<String> namespaceList=new ArrayList(namespaceToPrefix.keySet());
        Collections.reverse(namespaceList);
        for (        String namespace : namespaceList) {
          ATreeNode namespaceNode=null;
          if (namespace != null) {
            String prefix=namespaceToPrefix.get(namespace);
            namespaceNode=new ATreeNode();
            namespaceNode.setDataType(prefix);
            namespaceNode.setType(ATreeNode.NAMESPACE_TYPE);
            namespaceNode.setValue(namespace);
            node.addAsFirstChild(namespaceNode);
          }
        }
        rootNodes.add(node);
        break;
      }
    }
  }
 catch (  OdaException e) {
    e.printStackTrace();
  }
  return rootNodes.get(0);
}

Fixed version (ground truth):
public ATreeNode getSchemaTree(XSDSchema xsdSchema,ATreeNode selectedNode,boolean includeAttribute2){
  List<ATreeNode> rootNodes=new ArrayList<ATreeNode>();
  prefixNumberGenerated=1;
  List all=new ArrayList(xsdSchema.getElementDeclarations());
  try {
    for (Iterator i=all.iterator(); i.hasNext(); ) {
      XSDElementDeclaration xsdElementDeclaration=(XSDElementDeclaration)i.next();
      String elementName=xsdElementDeclaration.getName();
      ATreeNode node=new ATreeNode();
      String prefix=null;
      String namespace=xsdElementDeclaration.getTargetNamespace();
      node.setCurrentNamespace(namespace);
      String originalElementName=xsdElementDeclaration.getName();
      XSDTypeDefinition typeDef=xsdElementDeclaration.getTypeDefinition();
      if (namespace != null) {
        prefix=xsdElementDeclaration.getQName().contains("String_Node_Str") ? xsdElementDeclaration.getQName().split("String_Node_Str")[0] : "String_Node_Str";
        if (prefix == null || prefix.isEmpty()) {
          if (xsdSchema.getQNamePrefixToNamespaceMap().containsValue(typeDef.getTargetNamespace())) {
            for (            String key : xsdSchema.getQNamePrefixToNamespaceMap().keySet()) {
              if (xsdSchema.getQNamePrefixToNamespaceMap().get(key).equals(typeDef.getTargetNamespace())) {
                prefix=key;
              }
            }
          }
        }
        if (isEnableGeneratePrefix() && (prefix == null || prefix.isEmpty())) {
          prefix="String_Node_Str" + prefixNumberGenerated;
          prefixNumberGenerated++;
        }
        if (prefix != null && !prefix.isEmpty()) {
          elementName=prefix + "String_Node_Str" + xsdElementDeclaration.getName();
          namespaceToPrefix.put(namespace,prefix);
        }
 else {
          ATreeNode namespaceNode=new ATreeNode();
          namespaceNode.setDataType("String_Node_Str");
          namespaceNode.setType(ATreeNode.NAMESPACE_TYPE);
          namespaceNode.setValue(namespace);
          node.addChild(namespaceNode);
        }
      }
      if (!elementName.equals(selectedNode.getValue()) && (!(prefixNumberGenerated > 1 && originalElementName.equals(selectedNode.getValue())))) {
        namespaceToPrefix.clear();
        prefixNumberGenerated=1;
        continue;
      }
      node.setValue(elementName);
      node.setType(ATreeNode.ELEMENT_TYPE);
      node.setDataType(xsdElementDeclaration.getName());
      XSDTypeDefinition xsdTypeDefinition=xsdElementDeclaration.getTypeDefinition();
      XSDComplexTypeDefinition generalType=xsdSchema.resolveComplexTypeDefinitionURI(xsdElementDeclaration.getURI());
      if (generalType.getContainer() != null) {
        xsdTypeDefinition=generalType;
      }
      if (xsdTypeDefinition != null && xsdTypeDefinition.getName() != null) {
        node.setDataType(xsdTypeDefinition.getName());
      }
      if (xsdTypeDefinition instanceof XSDComplexTypeDefinition) {
        addComplexTypeDetails(xsdSchema,node,xsdTypeDefinition,prefix,namespace,"String_Node_Str" + elementName + "String_Node_Str");
      }
      List<String> namespaceList=new ArrayList(namespaceToPrefix.keySet());
      Collections.reverse(namespaceList);
      for (      String currentNamespace : namespaceList) {
        ATreeNode namespaceNode=null;
        if (currentNamespace != null) {
          prefix=namespaceToPrefix.get(currentNamespace);
          namespaceNode=new ATreeNode();
          namespaceNode.setDataType(prefix);
          namespaceNode.setType(ATreeNode.NAMESPACE_TYPE);
          namespaceNode.setValue(currentNamespace);
          node.addAsFirstChild(namespaceNode);
        }
      }
      rootNodes.add(node);
      break;
    }
    if (rootNodes.isEmpty()) {
      all=new ArrayList(xsdSchema.getTypeDefinitions());
      for (Iterator i=all.iterator(); i.hasNext(); ) {
        XSDTypeDefinition xsdTypeDefinition=(XSDTypeDefinition)i.next();
        String elementName=xsdTypeDefinition.getQName();
        if (!elementName.equals(selectedNode.getValue())) {
          continue;
        }
        ATreeNode node=new ATreeNode();
        node.setValue(elementName);
        node.setType(ATreeNode.ELEMENT_TYPE);
        node.setDataType(xsdTypeDefinition.getName());
        XSDComplexTypeDefinition generalType=xsdSchema.resolveComplexTypeDefinitionURI(xsdTypeDefinition.getURI());
        if (generalType.getContainer() != null) {
          xsdTypeDefinition=generalType;
        }
        if (xsdTypeDefinition != null && xsdTypeDefinition.getName() != null) {
          node.setDataType(xsdTypeDefinition.getQName());
        }
        if (xsdTypeDefinition instanceof XSDComplexTypeDefinition) {
          String prefix=elementName.contains("String_Node_Str") ? elementName.split("String_Node_Str")[0] : "String_Node_Str";
          String namespace=xsdTypeDefinition.getTargetNamespace();
          addComplexTypeDetails(xsdSchema,node,xsdTypeDefinition,prefix,namespace,"String_Node_Str" + elementName + "String_Node_Str");
        }
        if (xsdTypeDefinition.getTargetNamespace() != null) {
          String prefix=namespaceToPrefix.get(xsdTypeDefinition.getTargetNamespace());
          if (prefix != null) {
            node.setValue(prefix + "String_Node_Str" + xsdTypeDefinition.getName());
          }
          node.setCurrentNamespace(xsdTypeDefinition.getTargetNamespace());
        }
        List<String> namespaceList=new ArrayList(namespaceToPrefix.keySet());
        Collections.reverse(namespaceList);
        for (        String namespace : namespaceList) {
          ATreeNode namespaceNode=null;
          if (namespace != null) {
            String prefix=namespaceToPrefix.get(namespace);
            namespaceNode=new ATreeNode();
            namespaceNode.setDataType(prefix);
            namespaceNode.setType(ATreeNode.NAMESPACE_TYPE);
            namespaceNode.setValue(namespace);
            node.addAsFirstChild(namespaceNode);
          }
        }
        rootNodes.add(node);
        break;
      }
    }
  }
 catch (  OdaException e) {
    e.printStackTrace();
  }
  return rootNodes.get(0);
}