Program: 72778
Project: 72778
Buggy source:
/** 
 * (condition1 ? value1 : (condition2 ? value2 : (... : dummyValue)))
 * @param expression
 * @param columnIndex
 * @param contentIndex
 * @param concatenation
 */
private void _parseExpression(String expression,int rowIndex,boolean inmode){
  if (expression != "String_Node_Str") {
    String condition="String_Node_Str";
    String value="String_Node_Str";
    for (int i=1; i < getColumnCount(); i++) {
      expression=expression.substring(expression.indexOf("String_Node_Str") + 1);
      expression.trim();
      int endOfCondition=expression.indexOf("String_Node_Str");
      if (expression.contains("String_Node_Str") && (expression.indexOf("String_Node_Str") < expression.indexOf("String_Node_Str"))) {
        endOfCondition=SCRTableHelper.indexOfMatchingCloseBracket(expression,expression.indexOf("String_Node_Str"));
      }
      condition=expression.substring(0,endOfCondition).trim();
      expression=expression.substring(endOfCondition).trim();
      expression=expression.substring(expression.indexOf("String_Node_Str") + 1).trim();
      int endOfValue=expression.indexOf("String_Node_Str");
      if (expression.contains("String_Node_Str") && (expression.indexOf("String_Node_Str") < expression.indexOf("String_Node_Str"))) {
        endOfValue=SCRTableHelper.indexOfMatchingCloseBracket(expression,expression.indexOf("String_Node_Str"));
      }
      value=expression.substring(0,endOfValue).trim();
      expression=expression.substring(expression.indexOf("String_Node_Str") + 1).trim();
      expression=expression.substring(expression.indexOf("String_Node_Str") + 1).trim();
      int valueIndex=_getContentIndex(getRowCount() - 1,i);
      int contentIndex=_getContentIndex(rowIndex,i);
      if (inmode && condition.equals("String_Node_Str")) {
        condition="String_Node_Str";
      }
      String content=(String)_tableContent.get(contentIndex);
      if (!content.equals("String_Node_Str")) {
        if (content.equals("String_Node_Str")) {
          content=condition;
        }
 else         if (condition.equals("String_Node_Str")) {
        }
 else {
          content=content + "String_Node_Str" + condition;
        }
      }
 else {
        content=condition;
      }
      _tableContent.add(valueIndex,value);
      _tableContent.remove(valueIndex + 1);
      _tableContent.add(contentIndex,content);
      _tableContent.remove(contentIndex + 1);
    }
  }
}

Fixed version (ground truth):
/** 
 * (condition1 ? value1 : (condition2 ? value2 : (... : dummyValue)))
 * @param expression
 * @param columnIndex
 * @param contentIndex
 * @param concatenation
 */
private void _parseExpression(String expression,int rowIndex,boolean inmode){
  if (expression != "String_Node_Str") {
    String condition="String_Node_Str";
    String value="String_Node_Str";
    for (int i=1; i < getColumnCount(); i++) {
      expression=expression.substring(expression.indexOf("String_Node_Str") + 1).trim();
      int endOfCondition=expression.indexOf("String_Node_Str");
      if (expression.contains("String_Node_Str") && (expression.indexOf("String_Node_Str") < expression.indexOf("String_Node_Str"))) {
        endOfCondition=SCRTableHelper.indexOfMatchingCloseBracket(expression,expression.indexOf("String_Node_Str"));
      }
      condition=expression.substring(0,endOfCondition).trim();
      expression=expression.substring(endOfCondition).trim();
      expression=expression.substring(expression.indexOf("String_Node_Str") + 1).trim();
      int endOfValue=expression.indexOf("String_Node_Str");
      if (expression.contains("String_Node_Str") && (expression.indexOf("String_Node_Str") < expression.indexOf("String_Node_Str"))) {
        endOfValue=SCRTableHelper.indexOfMatchingCloseBracket(expression,expression.indexOf("String_Node_Str"));
      }
      value=expression.substring(0,endOfValue).trim();
      expression=expression.substring(expression.indexOf("String_Node_Str") + 1).trim();
      expression=expression.substring(expression.indexOf("String_Node_Str") + 1).trim();
      int valueIndex=_getContentIndex(getRowCount() - 1,i);
      int contentIndex=_getContentIndex(rowIndex,i);
      if (inmode && condition.equals("String_Node_Str")) {
        condition="String_Node_Str";
      }
      String content=(String)_tableContent.get(contentIndex);
      if (!content.equals("String_Node_Str")) {
        if (content.equals("String_Node_Str")) {
          content=condition;
        }
 else         if (condition.equals("String_Node_Str")) {
        }
 else {
          content=content + "String_Node_Str" + condition;
        }
      }
 else {
        content=condition;
      }
      _tableContent.add(valueIndex,value);
      _tableContent.remove(valueIndex + 1);
      _tableContent.add(contentIndex,content);
      _tableContent.remove(contentIndex + 1);
    }
  }
}