Program: 97290
Project: 97290
Buggy source:
public void processRow(String[] row) throws OseeCoreException {
  boolean isHeaderRow=false, foundDataType=false, isList, isNewRequirement=false;
  int rowIndex, documentIndex=-1, isRequirementIndex=-1, dataTypeIndex=-1;
  for (rowIndex=0; rowIndex < row.length; rowIndex++) {
    RowTypeEnum rowType=rowIndexToRowTypeMap.get(rowIndex);
    if (rowType == RowTypeEnum.DOCUMENT_APPLICABILITY) {
      documentIndex=rowIndex;
    }
 else     if (rowType == RowTypeEnum.IS_REQ) {
      isRequirementIndex=rowIndex;
    }
 else     if (rowType == RowTypeEnum.DATA_TYPE) {
      dataTypeIndex=rowIndex;
    }
  }
  if (isRequirementIndex > -1) {
    String rowValue=row[isRequirementIndex].toLowerCase().trim();
    isNewRequirement=(rowValue.equals("String_Node_Str"));
  }
 else   if (dataTypeIndex > -1) {
    String rowValue=row[dataTypeIndex];
    isNewRequirement=rowValue.contains(REQUIREMENT_SUBSTRING);
  }
  inHeaderRow=(inHeaderRow && !isNewRequirement);
  if (documentIndex > -1) {
    String rowValue=row[documentIndex].toLowerCase().trim();
    boolean emptyValue=(rowValue.equals("String_Node_Str") || rowValue.equals("String_Node_Str") || rowValue.equals("String_Node_Str")|| rowValue.equals("String_Node_Str"));
    if (inHeaderRow || emptyValue || isNewRequirement) {
      if (inArtifact || inHeaderRow) {
        processArtifact();
        publishInLine=!emptyValue;
        if (isNewRequirement) {
          numberRequirements++;
        }
        if (inHeaderRow) {
          mergeFirstRequirement();
        }
        if (emptyValue) {
          if (numberRequirements <= 1) {
            mergeFirstRequirement();
          }
          numberRequirements=0;
          headerArtifact=null;
        }
      }
      inArtifact=false;
      isHeaderRow=emptyValue;
      inHeaderRow=isHeaderRow || (inHeaderRow && !isNewRequirement);
      isRequirement=false;
    }
 else {
      if (Strings.isValid(documentApplicability)) {
        if (rowValue.indexOf(documentApplicability.toLowerCase()) == -1) {
          return;
        }
      }
      inHeaderRow=(inHeaderRow && !isNewRequirement);
    }
  }
  if (!rowIndexToRowTypeMap.isEmpty()) {
    isList=false;
    int requirementIndex=-1;
    String requirementColumn="String_Node_Str";
    boolean isRequirementColumn=false;
    for (rowIndex=0; rowIndex < row.length; rowIndex++) {
      isRequirementColumn=false;
      RowTypeEnum rowType=rowIndexToRowTypeMap.get(rowIndex);
      String rowValue=row[rowIndex];
switch (rowType) {
case REQUIREMENTS:
        if (isHeaderRow) {
          String noHTML=clearHTML(rowValue);
          String[] parsed=noHTML.split("String_Node_Str");
          boolean foundNumber=false;
          paragraphName="String_Node_Str";
          for (int i=0; i < parsed.length; i++) {
            if (!parsed[i].equals("String_Node_Str")) {
              if (!foundNumber) {
                paragraphNumber=parsed[i].trim();
                foundNumber=true;
              }
 else {
                paragraphName+="String_Node_Str" + parsed[i].trim();
              }
            }
          }
          rowValue="String_Node_Str";
        }
      requirementIndex=rowIndex;
    isRequirementColumn=true;
  requirementColumn=rowValue;
break;
case ID:
break;
case DOCUMENT_APPLICABILITY:
break;
case VERIFICATION_CRITERIA:
break;
case PARENT_ID:
break;
case GUID:
guidString=GUID.checkOrCreate(rowValue.trim());
if (Strings.isValid(guidString)) {
postProcessGuids.add(guidString);
}
break;
case IS_REQ:
if (!foundDataType) {
isRequirement=rowValue.trim().equals("String_Node_Str");
}
break;
case SUBSYSTEM:
subsystem=rowValue.trim();
break;
case DATA_TYPE:
foundDataType=true;
DataTypeEnum dataType=DataTypeEnum.fromString(rowValue.trim());
switch (dataType) {
case HEADING:
isRequirement=false;
lastDataType=DataTypeEnum.HEADING;
break;
case REQUIREMENT:
isRequirement=true;
lastDataType=DataTypeEnum.REQUIREMENT;
break;
case TABLE:
case INFORMATION:
case FIGURE:
isRequirement=lastDataType.equals(DataTypeEnum.REQUIREMENT);
break;
case NOT_DEFINED:
isRequirement=lastDataType.equals(DataTypeEnum.REQUIREMENT);
break;
case LIST:
isRequirement=lastDataType.equals(DataTypeEnum.REQUIREMENT);
isList=true;
break;
case OTHER:
foundDataType=false;
lastDataType=DataTypeEnum.OTHER;
break;
}
break;
case OBJECT_NUMBER:
if (!Strings.isValid(paragraphNumber)) {
paragraphNumber=rowValue;
}
break;
case PARAGRAPH_HEADING:
if (!inHeaderRow) {
paragraphName=rowValue.trim();
}
break;
case CHANGE_STATUS:
case OBJECT_HEADING:
case OBJECT_TEXT:
case CHANGE_RATIONALE:
case LINKS:
case OTHER:
break;
}
if (!isRequirementColumn) {
if (inArtifact) {
ListIterator<String> iter=theArtifact.listIterator(rowIndex);
String theColumnValue=iter.next();
theColumnValue+="String_Node_Str" + rowValue.trim();
iter.set(theColumnValue);
}
 else {
theArtifact.add(rowValue.trim());
}
}
 else {
if (!inArtifact) {
theArtifact.add("String_Node_Str");
}
}
}
ListIterator<String> iter=theArtifact.listIterator(requirementIndex);
String theColumnValue=iter.next();
if (isList) {
requirementColumn=processList(requirementColumn);
}
theColumnValue+="String_Node_Str" + requirementColumn.trim();
iter.set(theColumnValue);
}
inArtifact=true;
}

Fixed version (ground truth):
public void processRow(String[] row) throws OseeCoreException {
  boolean isHeaderRow=false, foundDataType=false, isList, isNewRequirement=false;
  int rowIndex, documentIndex=-1, isRequirementIndex=-1, dataTypeIndex=-1;
  for (rowIndex=0; rowIndex < row.length; rowIndex++) {
    RowTypeEnum rowType=rowIndexToRowTypeMap.get(rowIndex);
    if (rowType == RowTypeEnum.DOCUMENT_APPLICABILITY) {
      documentIndex=rowIndex;
    }
 else     if (rowType == RowTypeEnum.IS_REQ) {
      isRequirementIndex=rowIndex;
    }
 else     if (rowType == RowTypeEnum.DATA_TYPE) {
      dataTypeIndex=rowIndex;
    }
  }
  if (isRequirementIndex > -1) {
    String rowValue=row[isRequirementIndex].toLowerCase().trim();
    isNewRequirement=(rowValue.equals("String_Node_Str"));
  }
 else   if (dataTypeIndex > -1) {
    String rowValue=row[dataTypeIndex];
    isNewRequirement=rowValue.contains(REQUIREMENT_SUBSTRING);
  }
  inHeaderRow=(inHeaderRow && !isNewRequirement);
  if (documentIndex > -1) {
    String rowValue=row[documentIndex].toLowerCase().trim();
    boolean emptyValue=(rowValue.equals("String_Node_Str") || rowValue.equals("String_Node_Str") || rowValue.equals("String_Node_Str")|| rowValue.equals("String_Node_Str"));
    if (inHeaderRow || emptyValue || isNewRequirement) {
      if (inArtifact || inHeaderRow) {
        processArtifact();
        publishInLine=!emptyValue;
        if (isNewRequirement) {
          numberRequirements++;
        }
        if (inHeaderRow) {
          mergeFirstRequirement();
        }
        if (emptyValue) {
          if (numberRequirements <= 1) {
            mergeFirstRequirement();
          }
          numberRequirements=0;
          headerArtifact=null;
        }
      }
      inArtifact=false;
      isHeaderRow=emptyValue;
      inHeaderRow=isHeaderRow || (inHeaderRow && !isNewRequirement);
      isRequirement=false;
    }
 else {
      if (Strings.isValid(documentApplicability)) {
        if (rowValue.indexOf(documentApplicability.toLowerCase()) == -1) {
          return;
        }
      }
      inHeaderRow=(inHeaderRow && !isNewRequirement);
    }
  }
  if (!rowIndexToRowTypeMap.isEmpty()) {
    isList=false;
    int requirementIndex=-1;
    String requirementColumn="String_Node_Str";
    boolean isRequirementColumn=false;
    for (rowIndex=0; rowIndex < row.length; rowIndex++) {
      isRequirementColumn=false;
      RowTypeEnum rowType=rowIndexToRowTypeMap.get(rowIndex);
      String rowValue=row[rowIndex];
switch (rowType) {
case REQUIREMENTS:
        if (isHeaderRow) {
          String noHTML=clearHTML(rowValue);
          String[] parsed=noHTML.split("String_Node_Str");
          boolean foundNumber=false;
          paragraphName="String_Node_Str";
          for (int i=0; i < parsed.length; i++) {
            if (!parsed[i].equals("String_Node_Str")) {
              if (!foundNumber) {
                paragraphNumber=parsed[i].trim();
                foundNumber=true;
              }
 else {
                paragraphName+="String_Node_Str" + parsed[i].trim();
              }
            }
          }
          rowValue="String_Node_Str";
        }
      requirementIndex=rowIndex;
    isRequirementColumn=true;
  requirementColumn=rowValue;
break;
case ID:
break;
case DOCUMENT_APPLICABILITY:
break;
case VERIFICATION_CRITERIA:
break;
case PARENT_ID:
break;
case GUID:
guidString=GUID.checkOrCreate(rowValue.trim());
if (Strings.isValid(guidString)) {
postProcessGuids.add(guidString);
}
break;
case IS_REQ:
if (!foundDataType) {
isRequirement=rowValue.trim().equals("String_Node_Str");
}
break;
case SUBSYSTEM:
subsystem=rowValue.trim();
break;
case DATA_TYPE:
foundDataType=true;
DataTypeEnum dataType=DataTypeEnum.fromString(rowValue.trim());
switch (dataType) {
case HEADING:
isRequirement=false;
lastDataType=DataTypeEnum.HEADING;
break;
case REQUIREMENT:
isRequirement=true;
lastDataType=DataTypeEnum.REQUIREMENT;
break;
case TABLE:
case INFORMATION:
case FIGURE:
isRequirement=lastDataType.equals(DataTypeEnum.REQUIREMENT);
break;
case NOT_DEFINED:
isRequirement=lastDataType.equals(DataTypeEnum.REQUIREMENT);
break;
case LIST:
isRequirement=lastDataType.equals(DataTypeEnum.REQUIREMENT);
isList=true;
break;
case OTHER:
foundDataType=false;
lastDataType=DataTypeEnum.OTHER;
break;
}
break;
case OBJECT_NUMBER:
if (!Strings.isValid(paragraphNumber)) {
paragraphNumber=rowValue;
}
break;
case PARAGRAPH_HEADING:
String rowLower=rowValue.trim().toLowerCase();
boolean emptyValue=(rowLower.equals("String_Node_Str") || rowLower.equals("String_Node_Str") || rowLower.equals("String_Node_Str")|| rowValue.equals("String_Node_Str"));
if (!inHeaderRow && !emptyValue) {
paragraphName=rowValue.trim();
}
break;
case CHANGE_STATUS:
case OBJECT_HEADING:
case OBJECT_TEXT:
case CHANGE_RATIONALE:
case LINKS:
case OTHER:
break;
}
if (!isRequirementColumn) {
if (inArtifact) {
ListIterator<String> iter=theArtifact.listIterator(rowIndex);
String theColumnValue=iter.next();
theColumnValue+="String_Node_Str" + rowValue.trim();
iter.set(theColumnValue);
}
 else {
theArtifact.add(rowValue.trim());
}
}
 else {
if (!inArtifact) {
theArtifact.add("String_Node_Str");
}
}
}
ListIterator<String> iter=theArtifact.listIterator(requirementIndex);
String theColumnValue=iter.next();
if (isList) {
requirementColumn=processList(requirementColumn);
}
theColumnValue+="String_Node_Str" + requirementColumn.trim();
iter.set(theColumnValue);
}
inArtifact=true;
}