Program: 23286
Project: 23286
Buggy source:
private StructureDefinition parseProfileSheet(String n,List<String> namedSheets,List<ValidationMessage> issues,boolean logical) throws Exception {
  StructureDefinition sd=new StructureDefinition();
  Map<String,ElementDefinitionConstraintComponent> invariants=new HashMap<String,ElementDefinitionConstraintComponent>();
  String name=logical ? "String_Node_Str" : n + "String_Node_Str";
  sheet=loadSheet(name);
  if (sheet != null)   invariants=readInvariants(sheet,n,name);
  sheet=loadSheet(n);
  if (sheet == null)   throw new Exception("String_Node_Str" + n + "String_Node_Str");
  for (int row=0; row < sheet.rows.size(); row++) {
    ElementDefinition e=processLine(sd,sheet,row,invariants,true,row == 0);
    if (e != null)     for (    TypeRefComponent t : e.getType()) {
      if (t.hasProfile() && !"String_Node_Str".equals(t.getCode()) && t.getProfile().startsWith("String_Node_Str")) {
        if (!namedSheets.contains(t.getProfile().substring(1)))         namedSheets.add(t.getProfile().substring(1));
      }
    }
  }
  if (logical) {
    sd.setKind(StructureDefinitionKind.LOGICAL);
    sd.setId(sd.getDifferential().getElement().get(0).getPath());
    sd.getDifferential().getElementFirstRep().getType().clear();
    sd.setType(sd.getDifferential().getElementFirstRep().getPath());
    sd.setBaseDefinition("String_Node_Str");
    sd.setDerivation(TypeDerivationRule.SPECIALIZATION);
    sd.setAbstract(false);
  }
 else {
    sd.setKind(StructureDefinitionKind.RESOURCE);
    sd.setDerivation(TypeDerivationRule.CONSTRAINT);
    sd.setAbstract(false);
    sd.setId(n.toLowerCase());
    sd.setType(sd.getDifferential().getElementFirstRep().getPath());
    if (sd.getDifferential().getElementFirstRep().getType().size() == 1 && sd.getDifferential().getElementFirstRep().getType().get(0).hasTargetProfile())     sd.setBaseDefinition(sd.getDifferential().getElementFirstRep().getType().get(0).getTargetProfile());
 else     sd.setBaseDefinition("String_Node_Str" + sd.getType());
    if (!context.getResourceNames().contains(sd.getType()) && !context.getTypeNames().contains(sd.getType()))     throw new Exception("String_Node_Str" + sd.getType());
  }
  sd.getDifferential().getElementFirstRep().getType().clear();
  sd.setUrl(base + "String_Node_Str" + sd.getId());
  bundle.addEntry().setResource(sd).setFullUrl(sd.getUrl());
  sheet=loadSheet(n + "String_Node_Str");
  if (sheet != null) {
    int row=0;
    while (row < sheet.rows.size()) {
      if (sheet.getColumn(row,"String_Node_Str").startsWith("String_Node_Str"))       row++;
 else       row=processExtension(sheet,row,metadata("String_Node_Str"),issues,invariants);
    }
  }
  sheet=loadSheet(n + "String_Node_Str");
  if (sheet != null) {
    readSearchParams(sd,sheet,true);
  }
  if (invariants != null) {
    for (    ElementDefinitionConstraintComponent inv : invariants.values()) {
      if (Utilities.noString(inv.getUserString("String_Node_Str")))       throw new Exception("String_Node_Str" + sd.getId() + "String_Node_Str"+ inv.getId()+ "String_Node_Str");
 else {
        ElementDefinition ed=findContext(sd,inv.getUserString("String_Node_Str"),"String_Node_Str" + sd.getId() + "String_Node_Str"+ inv.getId()+ "String_Node_Str");
        ed.getConstraint().add(inv);
        if (Utilities.noString(inv.getXpath())) {
          throw new Exception("String_Node_Str" + sd.getId() + "String_Node_Str"+ inv.getId()+ "String_Node_Str"+ inv.getHuman()+ "String_Node_Str");
        }
        if (Utilities.noString(inv.getExpression())) {
          throw new Exception("String_Node_Str" + sd.getId() + "String_Node_Str"+ inv.getId()+ "String_Node_Str"+ inv.getHuman()+ "String_Node_Str");
        }
 else         if (inv.getXpath().contains("String_Node_Str"))         throw new Exception("String_Node_Str" + sd.getId() + "String_Node_Str"+ inv.getId()+ "String_Node_Str"+ inv.getHuman()+ "String_Node_Str"+ inv.getXpath());
      }
    }
  }
  if (hasMetadata("String_Node_Str"))   sd.setName(metadata("String_Node_Str"));
 else   sd.setName(sd.getDifferential().getElementFirstRep().getShort());
  if (!sd.hasName())   sd.setName("String_Node_Str" + sd.getId());
  sd.setPublisher(metadata("String_Node_Str"));
  if (hasMetadata("String_Node_Str"))   sd.addContact().getTelecom().add(Factory.newContactPoint(ContactPointSystem.URL,metadata("String_Node_Str")));
  if (hasMetadata("String_Node_Str"))   sd.setDateElement(Factory.newDateTime(metadata("String_Node_Str").substring(0,10)));
 else   sd.setDate(genDate.getTime());
  if (hasMetadata("String_Node_Str"))   sd.setVersion(metadata("String_Node_Str"));
  if (hasMetadata("String_Node_Str"))   sd.setStatus(PublicationStatus.fromCode(metadata("String_Node_Str")));
 else   sd.setStatus(PublicationStatus.DRAFT);
  new ProfileUtilities(context,null,null).setIds(sd,false);
  return sd;
}

Fixed version (ground truth):
private StructureDefinition parseProfileSheet(String n,List<String> namedSheets,List<ValidationMessage> issues,boolean logical) throws Exception {
  StructureDefinition sd=new StructureDefinition();
  Map<String,ElementDefinitionConstraintComponent> invariants=new HashMap<String,ElementDefinitionConstraintComponent>();
  String name=logical ? "String_Node_Str" : n + "String_Node_Str";
  sheet=loadSheet(name);
  if (sheet != null)   invariants=readInvariants(sheet,n,name);
  sheet=loadSheet(n);
  if (sheet == null)   throw new Exception("String_Node_Str" + n + "String_Node_Str");
  for (int row=0; row < sheet.rows.size(); row++) {
    ElementDefinition e=processLine(sd,sheet,row,invariants,true,row == 0);
    if (e != null)     for (    TypeRefComponent t : e.getType()) {
      if (t.hasProfile() && !"String_Node_Str".equals(t.getCode()) && t.getProfile().startsWith("String_Node_Str")) {
        if (!namedSheets.contains(t.getProfile().substring(1)))         namedSheets.add(t.getProfile().substring(1));
      }
    }
  }
  if (logical) {
    sd.setKind(StructureDefinitionKind.LOGICAL);
    sd.setId(sd.getDifferential().getElement().get(0).getPath());
    sd.getDifferential().getElementFirstRep().getType().clear();
    sd.setType(sd.getDifferential().getElementFirstRep().getPath());
    sd.setBaseDefinition("String_Node_Str");
    sd.setDerivation(TypeDerivationRule.SPECIALIZATION);
    sd.setAbstract(false);
  }
 else {
    sd.setKind(StructureDefinitionKind.RESOURCE);
    sd.setDerivation(TypeDerivationRule.CONSTRAINT);
    sd.setAbstract(false);
    sd.setId(n.toLowerCase());
    sd.setType(sd.getDifferential().getElementFirstRep().getPath());
    if (sd.getDifferential().getElementFirstRep().getType().size() == 1 && sd.getDifferential().getElementFirstRep().getType().get(0).hasTargetProfile())     sd.setBaseDefinition(sd.getDifferential().getElementFirstRep().getType().get(0).getTargetProfile());
 else     sd.setBaseDefinition("String_Node_Str" + sd.getType());
    if (!context.getResourceNames().contains(sd.getType()) && !context.getTypeNames().contains(sd.getType()))     throw new Exception("String_Node_Str" + sd.getType());
  }
  sd.getDifferential().getElementFirstRep().getType().clear();
  sd.setUrl(base + "String_Node_Str" + sd.getId());
  bundle.addEntry().setResource(sd).setFullUrl(sd.getUrl());
  sheet=loadSheet(n + "String_Node_Str");
  if (sheet != null) {
    int row=0;
    while (row < sheet.rows.size()) {
      if (sheet.getColumn(row,"String_Node_Str").startsWith("String_Node_Str"))       row++;
 else       row=processExtension(sheet,row,metadata("String_Node_Str"),issues,invariants);
    }
  }
  sheet=loadSheet(n + "String_Node_Str");
  if (sheet != null) {
    readSearchParams(sd,sheet,true);
  }
  if (invariants != null) {
    for (    ElementDefinitionConstraintComponent inv : invariants.values()) {
      if (Utilities.noString(inv.getUserString("String_Node_Str")))       throw new Exception("String_Node_Str" + sd.getId() + "String_Node_Str"+ inv.getId()+ "String_Node_Str");
 else {
        ElementDefinition ed=findContext(sd,inv.getUserString("String_Node_Str"),"String_Node_Str" + sd.getId() + "String_Node_Str"+ inv.getId()+ "String_Node_Str");
        ed.getConstraint().add(inv);
        if (Utilities.noString(inv.getXpath())) {
          throw new Exception("String_Node_Str" + sd.getId() + "String_Node_Str"+ inv.getId()+ "String_Node_Str"+ inv.getHuman()+ "String_Node_Str");
        }
        if (Utilities.noString(inv.getExpression())) {
          throw new Exception("String_Node_Str" + sd.getId() + "String_Node_Str"+ inv.getId()+ "String_Node_Str"+ inv.getHuman()+ "String_Node_Str");
        }
 else         if (inv.getXpath().contains("String_Node_Str"))         throw new Exception("String_Node_Str" + sd.getId() + "String_Node_Str"+ inv.getId()+ "String_Node_Str"+ inv.getHuman()+ "String_Node_Str"+ inv.getXpath());
      }
    }
  }
  if (hasMetadata("String_Node_Str"))   sd.setName(metadata("String_Node_Str"));
 else   sd.setName(sd.getDifferential().getElementFirstRep().getShort());
  if (!sd.hasName())   sd.setName("String_Node_Str" + sd.getId());
  sd.setPublisher(metadata("String_Node_Str"));
  if (hasMetadata("String_Node_Str"))   sd.addContact().getTelecom().add(Factory.newContactPoint(ContactPointSystem.URL,metadata("String_Node_Str")));
  if (hasMetadata("String_Node_Str"))   sd.setDateElement(Factory.newDateTime(metadata("String_Node_Str").substring(0,10)));
 else   sd.setDate(genDate.getTime());
  if (hasMetadata("String_Node_Str"))   sd.setVersion(metadata("String_Node_Str"));
  if (hasMetadata("String_Node_Str"))   sd.setStatus(PublicationStatus.fromCode(metadata("String_Node_Str")));
 else   sd.setStatus(PublicationStatus.DRAFT);
  ProfileUtilities utils=new ProfileUtilities(this.context,issues,null);
  utils.setIds(sd,false);
  return sd;
}