Program: 23361
Project: 23361
Buggy source:
private void generateElement(ElementDefn root,ElementDefn e,Set<String> required,JsonObject props,boolean relative) throws Exception {
  if (e.getTypes().size() > 1 || (e.getTypes().size() == 1 && e.getTypes().get(0).isWildcardType())) {
    if (!e.getName().contains("String_Node_Str"))     throw new Exception("String_Node_Str" + e.getName() + "String_Node_Str"+ root.getName()+ "String_Node_Str");
    if (e.getTypes().size() == 1)     generateAny(root,e,e.getName().replace("String_Node_Str","String_Node_Str"),props,relative);
 else {
      for (      TypeRef t : e.getTypes()) {
        JsonObject property=new JsonObject();
        JsonObject property_=null;
        String en=e.getName().replace("String_Node_Str","String_Node_Str");
        props.add(en + upFirst(t.getName()),property);
        property.addProperty("String_Node_Str",e.getDefinition());
        String tref=null;
        String type=null;
        String pattern=null;
        if (definitions.getPrimitives().containsKey(t.getName())) {
          DefinedCode def=definitions.getPrimitives().get(t.getName());
          type=def.getJsonType();
          pattern=def.getRegex();
          if (!Utilities.noString(pattern))           property.addProperty("String_Node_Str",pattern);
          property.addProperty("String_Node_Str",type);
          property_=new JsonObject();
          props.add(en + upFirst(t.getName()) + "String_Node_Str",property_);
          property_.addProperty("String_Node_Str","String_Node_Str" + en + upFirst(t.getName()));
          tref=(relative ? "String_Node_Str" : "String_Node_Str") + "String_Node_Str";
          property_.addProperty("String_Node_Str",tref);
        }
 else {
          String tn=encodeType(e,t,true);
          tref=(relative ? "String_Node_Str" : tn + "String_Node_Str") + "String_Node_Str" + tn;
          property.addProperty("String_Node_Str",tref);
        }
      }
    }
  }
 else {
    JsonObject property=new JsonObject();
    JsonObject property_=null;
    props.add(e.getName(),property);
    property.addProperty("String_Node_Str",e.getDefinition());
    String tref=null;
    String type=null;
    String pattern=null;
    if (e.usesCompositeType()) {
      ElementDefn ref=root.getElementByName(definitions,e.typeCode().substring(1),true,false);
      String rtn=types.get(ref);
      if (rtn == null)       throw new Exception("String_Node_Str" + types.toString() + "String_Node_Str");
      tref="String_Node_Str" + rtn;
    }
 else     if (e.getTypes().size() == 0 && e.getElements().size() > 0) {
      tref="String_Node_Str" + types.get(e);
    }
 else     if (e.getTypes().size() == 1) {
      if (definitions.getPrimitives().containsKey(e.typeCode())) {
        DefinedCode def=definitions.getPrimitives().get(e.typeCode());
        type=def.getJsonType();
        pattern=def.getRegex();
        property_=new JsonObject();
        props.add(e.getName() + "String_Node_Str",property_);
        property_.addProperty("String_Node_Str","String_Node_Str" + e.getName());
        tref=(relative ? "String_Node_Str" : "String_Node_Str") + "String_Node_Str";
        if (e.getBinding() != null) {
          ValueSet vs=enums.get(e.getBinding().getName());
          if (vs != null) {
            ValueSet ex=workerContext.expandVS(vs,true,false).getValueset();
            JsonArray enums=new JsonArray();
            for (            ValueSetExpansionContainsComponent cc : ex.getExpansion().getContains()) {
              enums.add(new JsonPrimitive(cc.getCode()));
            }
            property.add("String_Node_Str",enums);
            pattern=null;
          }
        }
      }
 else {
        String tn=encodeType(e,e.getTypes().get(0),true);
        tref=(relative ? "String_Node_Str" : tn + "String_Node_Str") + "String_Node_Str" + tn;
      }
    }
 else     throw new Exception("String_Node_Str" + e.getName() + "String_Node_Str"+ root.getName()+ "String_Node_Str"+ Integer.toString(e.getTypes().size()));
    if (e.unbounded()) {
      property.addProperty("String_Node_Str","String_Node_Str");
      if (property_ != null) {
        JsonObject items=new JsonObject();
        property.add("String_Node_Str",items);
        items.addProperty("String_Node_Str",type);
        if (!Utilities.noString(pattern))         items.addProperty("String_Node_Str",pattern);
        items=new JsonObject();
        property_.add("String_Node_Str",items);
        items.addProperty("String_Node_Str",tref);
      }
 else {
        JsonObject items=new JsonObject();
        property.add("String_Node_Str",items);
        items.addProperty("String_Node_Str",tref);
      }
    }
 else {
      if (property_ != null) {
        property.addProperty("String_Node_Str",type);
        if (!Utilities.noString(pattern))         property.addProperty("String_Node_Str",pattern);
        property_.addProperty("String_Node_Str",tref);
      }
 else       property.addProperty("String_Node_Str",tref);
    }
    if (e.getMinCardinality() > 0 && property_ == null)     required.add(e.getName());
  }
}

Fixed version (ground truth):
private void generateElement(ElementDefn root,ElementDefn e,Set<String> required,JsonObject props,boolean relative) throws Exception {
  if (e.getTypes().size() > 1 || (e.getTypes().size() == 1 && e.getTypes().get(0).isWildcardType())) {
    if (!e.getName().contains("String_Node_Str"))     throw new Exception("String_Node_Str" + e.getName() + "String_Node_Str"+ root.getName()+ "String_Node_Str");
    if (e.getTypes().size() == 1)     generateAny(root,e,e.getName().replace("String_Node_Str","String_Node_Str"),props,relative);
 else {
      for (      TypeRef t : e.getTypes()) {
        JsonObject property=new JsonObject();
        JsonObject property_=null;
        String en=e.getName().replace("String_Node_Str","String_Node_Str");
        props.add(en + upFirst(t.getName()),property);
        property.addProperty("String_Node_Str",e.getDefinition());
        String tref=null;
        String type=null;
        String pattern=null;
        if (definitions.getPrimitives().containsKey(t.getName())) {
          DefinedCode def=definitions.getPrimitives().get(t.getName());
          type=def.getJsonType();
          pattern=def.getRegex();
          if (!Utilities.noString(pattern))           property.addProperty("String_Node_Str",pattern);
          property.addProperty("String_Node_Str",type);
          property_=new JsonObject();
          props.add("String_Node_Str" + en + upFirst(t.getName()),property_);
          property_.addProperty("String_Node_Str","String_Node_Str" + en + upFirst(t.getName()));
          tref=(relative ? "String_Node_Str" : "String_Node_Str") + "String_Node_Str";
          property_.addProperty("String_Node_Str",tref);
        }
 else {
          String tn=encodeType(e,t,true);
          tref=(relative ? "String_Node_Str" : tn.replace("String_Node_Str","String_Node_Str") + "String_Node_Str") + "String_Node_Str" + tn.replace("String_Node_Str","String_Node_Str");
          property.addProperty("String_Node_Str",tref);
        }
      }
    }
  }
 else {
    JsonObject property=new JsonObject();
    JsonObject property_=null;
    props.add(e.getName(),property);
    property.addProperty("String_Node_Str",e.getDefinition());
    String tref=null;
    String type=null;
    String pattern=null;
    if (e.usesCompositeType()) {
      ElementDefn ref=root.getElementByName(definitions,e.typeCode().substring(1),true,false);
      String rtn=types.get(ref);
      if (rtn == null)       throw new Exception("String_Node_Str" + types.toString() + "String_Node_Str");
      if (rtn == "String_Node_Str")       rtn="String_Node_Str";
      type=rtn;
      tref="String_Node_Str" + rtn.replace("String_Node_Str","String_Node_Str");
    }
 else     if (e.getTypes().size() == 0 && e.getElements().size() > 0) {
      tref="String_Node_Str" + types.get(e).replace("String_Node_Str","String_Node_Str");
      type=types.get(e).replace("String_Node_Str","String_Node_Str");
    }
 else     if (e.getTypes().size() == 1) {
      String tn=encodeType(e,e.getTypes().get(0),true);
      type=tn;
      if (definitions.getPrimitives().containsKey(e.typeCode())) {
        DefinedCode def=definitions.getPrimitives().get(e.typeCode());
        type=def.getJsonType();
        pattern=def.getRegex();
        property_=new JsonObject();
        props.add("String_Node_Str" + e.getName(),property_);
        property_.addProperty("String_Node_Str","String_Node_Str" + e.getName());
        tref=(relative ? "String_Node_Str" : "String_Node_Str") + "String_Node_Str";
        BindingSpecification cd=e.getBinding();
        if (cd != null && (cd.getBinding() == BindingSpecification.BindingMethod.CodeList)) {
          ValueSet vs=cd.getValueSet();
          if (vs != null) {
            ValueSet ex=workerContext.expandVS(vs,true,false).getValueset();
            JsonArray enums=new JsonArray();
            for (            ValueSetExpansionContainsComponent cc : ex.getExpansion().getContains()) {
              enums.add(new JsonPrimitive(cc.getCode()));
            }
            property.add("String_Node_Str",enums);
            pattern=null;
          }
        }
      }
 else {
        tref=(relative ? "String_Node_Str" : tn.replace("String_Node_Str","String_Node_Str") + "String_Node_Str") + "String_Node_Str" + tn.replace("String_Node_Str","String_Node_Str");
      }
    }
 else     throw new Exception("String_Node_Str" + e.getName() + "String_Node_Str"+ root.getName()+ "String_Node_Str"+ Integer.toString(e.getTypes().size()));
    if (e.unbounded()) {
      property.addProperty("String_Node_Str","String_Node_Str");
      if (property_ != null) {
        property_.addProperty("String_Node_Str","String_Node_Str");
        JsonObject items=new JsonObject();
        property.add("String_Node_Str",items);
        items.addProperty("String_Node_Str",type);
        if (!Utilities.noString(pattern))         items.addProperty("String_Node_Str",pattern);
        items=new JsonObject();
        property_.add("String_Node_Str",items);
        items.addProperty("String_Node_Str",tref);
      }
 else {
        JsonObject items=new JsonObject();
        property.add("String_Node_Str",items);
        items.addProperty("String_Node_Str",tref);
      }
    }
 else {
      if (property_ != null) {
        property.addProperty("String_Node_Str",type);
        if (!Utilities.noString(pattern))         property.addProperty("String_Node_Str",pattern);
        property_.addProperty("String_Node_Str",tref);
      }
 else       if ("String_Node_Str".equals(e.getName()) && "String_Node_Str".equals(type)) {
        property.addProperty("String_Node_Str","String_Node_Str");
      }
 else {
        property.addProperty("String_Node_Str",tref);
      }
    }
    if (e.getMinCardinality() > 0 && property_ == null)     required.add(e.getName());
  }
}