Program: 24060
Project: 24060
Buggy source:
private void generateElement(ElementDefn root,ElementDefn e,String paramType,Map<String,String> rules) throws Exception {
  List<TypeRef> types=e.getTypes();
  if (types.size() > 1 || (types.size() == 1 && types.get(0).isWildcardType())) {
    if (!e.getName().contains("String_Node_Str"))     throw new Exception("String_Node_Str" + e.getName() + "String_Node_Str"+ root.getName());
    if ((types.size() == 1 && types.get(0).isWildcardType())) {
      generateAny(root,e,e.getName().replace("String_Node_Str","String_Node_Str"),null);
    }
 else {
      String close="String_Node_Str";
      ;
      if (!forCodeGeneration) {
        write("String_Node_Str" + checkRule(e.getMinCardinality().toString(),e.getName() + "String_Node_Str",rules) + "String_Node_Str");
        if (e.hasDefinition()) {
          write("String_Node_Str");
          write("String_Node_Str" + Utilities.escapeXml(checkRule(e.getDefinition(),e.getName() + "String_Node_Str",rules)) + "String_Node_Str");
          write("String_Node_Str");
        }
        close="String_Node_Str";
      }
      for (      TypeRef t : types) {
        String type=encodeType(e,t,true);
        String name=e.getName().substring(0,e.getName().length() - 3) + nameForType(type);
        write("String_Node_Str" + name + "String_Node_Str"+ type+ "String_Node_Str");
        if (e.unbounded())         write("String_Node_Str" + checkRule("String_Node_Str",e.getName() + "String_Node_Str",rules) + "String_Node_Str"+ close+ "String_Node_Str");
 else         write("String_Node_Str" + checkRule("String_Node_Str",e.getName() + "String_Node_Str",rules) + "String_Node_Str"+ close+ "String_Node_Str");
        if (forCodeGeneration) {
          write("String_Node_Str");
          if (e.hasDefinition()) {
            write("String_Node_Str" + Utilities.escapeXml(checkRule(e.getDefinition(),e.getName() + "String_Node_Str",rules)) + "String_Node_Str"+ e.getName().replace("String_Node_Str","String_Node_Str")+ "String_Node_Str");
          }
 else {
            write("String_Node_Str" + e.getName().replace("String_Node_Str","String_Node_Str") + "String_Node_Str");
          }
          write("String_Node_Str");
          write("String_Node_Str");
        }
      }
      if (!forCodeGeneration)       write("String_Node_Str");
    }
  }
 else {
    write("String_Node_Str");
    if ("String_Node_Str".equals(e.getName()))     write("String_Node_Str" + e.getName() + "String_Node_Str");
 else     if ("String_Node_Str".equals(e.getName()) && e.typeCode().equals("String_Node_Str"))     write("String_Node_Str");
 else     if (e.usesCompositeType()) {
      ElementDefn ref=root.getElementByName(e.typeCode().substring(1));
      String rtn=this.types.get(ref);
      if (rtn == null)       throw new Exception("String_Node_Str" + types.toString() + "String_Node_Str");
      write("String_Node_Str" + e.getName() + "String_Node_Str"+ rtn+ "String_Node_Str");
    }
 else     if (types.size() == 0 && e.getElements().size() > 0) {
      String tn=root.getName() + "String_Node_Str" + Utilities.capitalize(e.getName());
      int i=0;
      while (structures.containsKey(tn)) {
        i++;
        tn=root.getName() + "String_Node_Str" + Utilities.capitalize(e.getName())+ Integer.toString(i);
      }
      write("String_Node_Str" + e.getName() + "String_Node_Str"+ tn+ "String_Node_Str");
      structures.put(tn,e);
      this.types.put(e,tn);
      typenames.add(tn);
    }
 else     if (types.size() == 1) {
      if (types.get(0).isUnboundGenericParam() && paramType != null)       write("String_Node_Str" + e.getName() + "String_Node_Str"+ paramType+ "String_Node_Str");
 else       if (!Utilities.noString(e.getRegex())) {
        String tn=root.getName() + Utilities.capitalize(e.getName()) + "String_Node_Str";
        regexQueue.put(tn,e.getRegex());
        write("String_Node_Str" + e.getName() + "String_Node_Str"+ tn+ "String_Node_Str");
      }
 else       write("String_Node_Str" + e.getName() + "String_Node_Str"+ encodeType(e,types.get(0),true)+ "String_Node_Str");
    }
 else     throw new Exception("String_Node_Str" + e.getName() + "String_Node_Str"+ root.getName()+ "String_Node_Str"+ Integer.toString(types.size()));
    write("String_Node_Str" + checkRule(e.getMinCardinality().toString(),e.getName() + "String_Node_Str",rules) + "String_Node_Str");
    if (e.unbounded())     write("String_Node_Str" + checkRule("String_Node_Str",e.getName() + "String_Node_Str",rules) + "String_Node_Str");
 else     write("String_Node_Str" + checkRule("String_Node_Str",e.getName() + "String_Node_Str",rules) + "String_Node_Str");
    if (e.hasDefinition()) {
      write("String_Node_Str");
      write("String_Node_Str");
      write("String_Node_Str" + Utilities.escapeXml(checkRule(e.getDefinition(),e.getName() + "String_Node_Str",rules)) + "String_Node_Str");
      write("String_Node_Str");
      write("String_Node_Str");
    }
 else {
      write("String_Node_Str");
    }
  }
}

Fixed version (ground truth):
private void generateElement(ElementDefn root,ElementDefn e,String paramType,Map<String,String> rules) throws Exception {
  List<TypeRef> types=e.getTypes();
  if (types.size() > 1 || (types.size() == 1 && types.get(0).isWildcardType())) {
    if (!e.getName().contains("String_Node_Str"))     throw new Exception("String_Node_Str" + e.getName() + "String_Node_Str"+ root.getName());
    if ((types.size() == 1 && types.get(0).isWildcardType())) {
      generateAny(root,e,e.getName().replace("String_Node_Str","String_Node_Str"),null);
    }
 else {
      String close="String_Node_Str";
      ;
      if (!forCodeGeneration) {
        write("String_Node_Str" + checkRule(e.getMinCardinality().toString(),e.getName() + "String_Node_Str",rules) + "String_Node_Str");
        if (e.hasDefinition()) {
          write("String_Node_Str");
          write("String_Node_Str" + Utilities.escapeXml(checkRule(e.getDefinition(),e.getName() + "String_Node_Str",rules)) + "String_Node_Str");
          write("String_Node_Str");
        }
        close="String_Node_Str";
      }
      for (      TypeRef t : types) {
        String type=encodeType(e,t,true);
        String name=e.getName().substring(0,e.getName().length() - 3) + nameForType(type);
        write("String_Node_Str" + name + "String_Node_Str"+ type+ "String_Node_Str");
        if (e.unbounded())         write("String_Node_Str" + checkRule("String_Node_Str",e.getName() + "String_Node_Str",rules) + "String_Node_Str"+ close+ "String_Node_Str");
 else         write("String_Node_Str" + checkRule("String_Node_Str",e.getName() + "String_Node_Str",rules) + "String_Node_Str"+ close+ "String_Node_Str");
        if (forCodeGeneration) {
          write("String_Node_Str");
          if (e.hasDefinition()) {
            write("String_Node_Str" + Utilities.escapeXml(checkRule(e.getDefinition(),e.getName() + "String_Node_Str",rules)) + "String_Node_Str"+ e.getName().replace("String_Node_Str","String_Node_Str")+ "String_Node_Str");
          }
 else {
            write("String_Node_Str" + e.getName().replace("String_Node_Str","String_Node_Str") + "String_Node_Str");
          }
          write("String_Node_Str");
          write("String_Node_Str");
        }
      }
      if (!forCodeGeneration)       write("String_Node_Str");
    }
  }
 else {
    write("String_Node_Str");
    if ("String_Node_Str".equals(e.getName()))     write("String_Node_Str" + e.getName() + "String_Node_Str");
 else     if ("String_Node_Str".equals(e.getName()) && e.typeCode().equals("String_Node_Str"))     write("String_Node_Str");
 else     if (e.usesCompositeType()) {
      ElementDefn ref=root.getElementByName(e.typeCode().substring(1));
      String rtn=this.types.get(ref);
      if (rtn == null)       throw new Exception("String_Node_Str" + types.toString() + "String_Node_Str");
      write("String_Node_Str" + e.getName() + "String_Node_Str"+ rtn+ "String_Node_Str");
    }
 else     if (types.size() == 0 && e.getElements().size() > 0) {
      String tn=root.getName() + "String_Node_Str" + Utilities.capitalize(e.getName());
      int i=0;
      while (typenames.contains(tn)) {
        i++;
        tn=root.getName() + "String_Node_Str" + Utilities.capitalize(e.getName())+ Integer.toString(i);
      }
      write("String_Node_Str" + e.getName() + "String_Node_Str"+ tn+ "String_Node_Str");
      structures.put(tn,e);
      this.types.put(e,tn);
      typenames.add(tn);
    }
 else     if (types.size() == 1) {
      if (types.get(0).isUnboundGenericParam() && paramType != null)       write("String_Node_Str" + e.getName() + "String_Node_Str"+ paramType+ "String_Node_Str");
 else       if (!Utilities.noString(e.getRegex())) {
        String tn=root.getName() + Utilities.capitalize(e.getName()) + "String_Node_Str";
        regexQueue.put(tn,e.getRegex());
        write("String_Node_Str" + e.getName() + "String_Node_Str"+ tn+ "String_Node_Str");
      }
 else       write("String_Node_Str" + e.getName() + "String_Node_Str"+ encodeType(e,types.get(0),true)+ "String_Node_Str");
    }
 else     throw new Exception("String_Node_Str" + e.getName() + "String_Node_Str"+ root.getName()+ "String_Node_Str"+ Integer.toString(types.size()));
    write("String_Node_Str" + checkRule(e.getMinCardinality().toString(),e.getName() + "String_Node_Str",rules) + "String_Node_Str");
    if (e.unbounded())     write("String_Node_Str" + checkRule("String_Node_Str",e.getName() + "String_Node_Str",rules) + "String_Node_Str");
 else     write("String_Node_Str" + checkRule("String_Node_Str",e.getName() + "String_Node_Str",rules) + "String_Node_Str");
    if (e.hasDefinition()) {
      write("String_Node_Str");
      write("String_Node_Str");
      write("String_Node_Str" + Utilities.escapeXml(checkRule(e.getDefinition(),e.getName() + "String_Node_Str",rules)) + "String_Node_Str");
      write("String_Node_Str");
      write("String_Node_Str");
    }
 else {
      write("String_Node_Str");
    }
  }
}