Program: 68255
Project: 68255
Buggy source:
public JavaClass[] processObjectFactory(JavaClass objectFactoryClass,ArrayList<JavaClass> classes){
  Collection methods=objectFactoryClass.getMethods();
  Iterator methodsIter=methods.iterator();
  NamespaceInfo namespaceInfo=getNamespaceInfoForPackage(objectFactoryClass.getPackage());
  while (methodsIter.hasNext()) {
    JavaMethod next=(JavaMethod)methodsIter.next();
    if (next.getName().startsWith("String_Node_Str")) {
      if (!(next.getReturnType().getName().equals("String_Node_Str")) && !classes.contains(next.getReturnType())) {
        classes.add(next.getReturnType());
      }
 else {
        if (helper.isAnnotationPresent(next,XmlElementDecl.class)) {
          XmlElementDecl elementDecl=(XmlElementDecl)helper.getAnnotation(next,XmlElementDecl.class);
          String url=elementDecl.namespace();
          if ("String_Node_Str".equals(url)) {
            url=namespaceInfo.getNamespace();
          }
          String localName=elementDecl.name();
          QName qname=new QName(url,localName);
          JavaClass type=(JavaClass)next.getReturnType().getActualTypeArguments().toArray()[0];
          if (this.globalElements == null) {
            globalElements=new HashMap<QName,ElementDeclaration>();
          }
          ElementDeclaration declaration=new ElementDeclaration(qname,type.getQualifiedName());
          if (!elementDecl.substitutionHeadName().equals("String_Node_Str")) {
            String subHeadLocal=elementDecl.substitutionHeadName();
            String subHeadNamespace=elementDecl.substitutionHeadNamespace();
            if (subHeadNamespace.equals("String_Node_Str")) {
              subHeadNamespace=namespaceInfo.getNamespace();
            }
            declaration.setSubstitutionHead(new QName(subHeadNamespace,subHeadLocal));
          }
          globalElements.put(qname,declaration);
          if (!helper.isBuiltInJavaType(type) && !classes.contains(type)) {
            classes.add(type);
          }
        }
      }
    }
  }
  if (classes.size() > 0) {
    return classes.toArray(new JavaClass[classes.size()]);
  }
 else {
    return new JavaClass[0];
  }
}

Fixed version (ground truth):
public JavaClass[] processObjectFactory(JavaClass objectFactoryClass,ArrayList<JavaClass> classes){
  Collection methods=objectFactoryClass.getMethods();
  Iterator methodsIter=methods.iterator();
  NamespaceInfo namespaceInfo=getNamespaceInfoForPackage(objectFactoryClass.getPackage());
  while (methodsIter.hasNext()) {
    JavaMethod next=(JavaMethod)methodsIter.next();
    if (next.getName().startsWith("String_Node_Str")) {
      if (!(next.getReturnType().getName().equals("String_Node_Str")) && !classes.contains(next.getReturnType())) {
        classes.add(next.getReturnType());
      }
 else {
        if (helper.isAnnotationPresent(next,XmlElementDecl.class)) {
          XmlElementDecl elementDecl=(XmlElementDecl)helper.getAnnotation(next,XmlElementDecl.class);
          String url=elementDecl.namespace();
          if ("String_Node_Str".equals(url)) {
            url=namespaceInfo.getNamespace();
          }
          String localName=elementDecl.name();
          QName qname=new QName(url,localName);
          JavaClass type=(JavaClass)next.getReturnType().getActualTypeArguments().toArray()[0];
          if (this.globalElements == null) {
            globalElements=new HashMap<QName,ElementDeclaration>();
          }
          ElementDeclaration declaration=new ElementDeclaration(qname,type,type.getQualifiedName());
          if (!elementDecl.substitutionHeadName().equals("String_Node_Str")) {
            String subHeadLocal=elementDecl.substitutionHeadName();
            String subHeadNamespace=elementDecl.substitutionHeadNamespace();
            if (subHeadNamespace.equals("String_Node_Str")) {
              subHeadNamespace=namespaceInfo.getNamespace();
            }
            declaration.setSubstitutionHead(new QName(subHeadNamespace,subHeadLocal));
          }
          globalElements.put(qname,declaration);
          if (!helper.isBuiltInJavaType(type) && !classes.contains(type)) {
            classes.add(type);
          }
        }
      }
    }
  }
  if (classes.size() > 0) {
    return classes.toArray(new JavaClass[classes.size()]);
  }
 else {
    return new JavaClass[0];
  }
}