Program: 129781
Project: 129781
Buggy source:
public List<ATreeNode> getAllRootNodes(XSDSchema xsdSchema) throws OdaException {
  List<ATreeNode> rootNodes=new ArrayList<ATreeNode>();
  List<String> rootNodesName=new ArrayList<String>();
  List all=new ArrayList(xsdSchema.getElementDeclarations());
  all.addAll(xsdSchema.getTypeDefinitions());
  all=XSDNamedComponentImpl.sortNamedComponents(all);
  for (Iterator i=all.iterator(); i.hasNext(); ) {
    Object o=i.next();
    if (o instanceof XSDElementDeclaration) {
      ATreeNode node=new ATreeNode();
      XSDElementDeclaration xsdElementDeclaration=(XSDElementDeclaration)o;
      String elementName=xsdElementDeclaration.getQName();
      node.setType(ATreeNode.ELEMENT_TYPE);
      node.setDataType(xsdElementDeclaration.getName());
      XSDTypeDefinition xsdTypeDefinition=xsdElementDeclaration.getTypeDefinition();
      String prefix=null;
      String namespace=xsdElementDeclaration.getTargetNamespace();
      node.setCurrentNamespace(namespace);
      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 (prefix != null && !prefix.isEmpty()) {
            elementName=prefix + "String_Node_Str" + elementName;
          }
        }
      }
      node.setValue(elementName);
      XSDComplexTypeDefinition generalType=xsdSchema.resolveComplexTypeDefinitionURI(xsdElementDeclaration.getURI());
      if (generalType.getContainer() != null) {
        xsdTypeDefinition=generalType;
      }
      if (xsdTypeDefinition != null && xsdTypeDefinition.getName() != null) {
        node.setDataType(xsdTypeDefinition.getName());
      }
      if (!rootNodes.contains(node) && !rootNodesName.contains(node.getValue())) {
        rootNodesName.add((String)node.getValue());
        rootNodes.add(node);
      }
    }
 else {
      XSDTypeDefinition xsdTypeDefinition=(XSDTypeDefinition)o;
      if (xsdTypeDefinition instanceof XSDComplexTypeDefinition) {
        ATreeNode node=new ATreeNode();
        String elementName=xsdTypeDefinition.getQName();
        node.setValue(elementName);
        node.setType(ATreeNode.ELEMENT_TYPE);
        node.setDataType(xsdTypeDefinition.getName());
        if (!rootNodes.contains(node) && !rootNodesName.contains(node.getValue())) {
          rootNodesName.add((String)node.getValue());
          rootNodes.add(node);
        }
      }
    }
  }
  return rootNodes;
}

Fixed version (ground truth):
public List<ATreeNode> getAllRootNodes(XSDSchema xsdSchema) throws OdaException {
  List<ATreeNode> rootNodes=new ArrayList<ATreeNode>();
  List<String> rootNodesName=new ArrayList<String>();
  List all=new ArrayList(xsdSchema.getElementDeclarations());
  all.addAll(xsdSchema.getTypeDefinitions());
  all=XSDNamedComponentImpl.sortNamedComponents(all);
  for (Iterator i=all.iterator(); i.hasNext(); ) {
    Object o=i.next();
    if (o instanceof XSDElementDeclaration) {
      ATreeNode node=new ATreeNode();
      XSDElementDeclaration xsdElementDeclaration=(XSDElementDeclaration)o;
      String elementName=xsdElementDeclaration.getQName();
      node.setType(ATreeNode.ELEMENT_TYPE);
      node.setDataType(xsdElementDeclaration.getName());
      XSDTypeDefinition xsdTypeDefinition=xsdElementDeclaration.getTypeDefinition();
      String prefix=null;
      String namespace=xsdElementDeclaration.getTargetNamespace();
      node.setCurrentNamespace(namespace);
      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 (prefix != null && !prefix.isEmpty()) {
            elementName=prefix + "String_Node_Str" + elementName;
          }
        }
      }
      node.setValue(elementName);
      if (xsdTypeDefinition == null) {
        XSDComplexTypeDefinition generalType=xsdSchema.resolveComplexTypeDefinitionURI(xsdElementDeclaration.getURI());
        if (generalType.getContainer() != null) {
          xsdTypeDefinition=generalType;
        }
      }
      if (xsdTypeDefinition != null && xsdTypeDefinition.getName() != null) {
        node.setDataType(xsdTypeDefinition.getName());
      }
      if (!rootNodes.contains(node) && !rootNodesName.contains(node.getValue())) {
        rootNodesName.add((String)node.getValue());
        rootNodes.add(node);
      }
    }
 else {
      XSDTypeDefinition xsdTypeDefinition=(XSDTypeDefinition)o;
      if (xsdTypeDefinition instanceof XSDComplexTypeDefinition) {
        ATreeNode node=new ATreeNode();
        String elementName=xsdTypeDefinition.getQName();
        node.setValue(elementName);
        node.setType(ATreeNode.ELEMENT_TYPE);
        node.setDataType(xsdTypeDefinition.getName());
        if (!rootNodes.contains(node) && !rootNodesName.contains(node.getValue())) {
          rootNodesName.add((String)node.getValue());
          rootNodes.add(node);
        }
      }
    }
  }
  return rootNodes;
}