Program: 65793
Project: 65793
Buggy source:
/** 
 * Processes the given selection list, and adds the element to the given parameter bean's selection list.
 * @param selectionList original selection list to be processed
 * @param parameterBean scalar parameter bean
 * @param locale locale (for data conversion)
 * @param timeZone time zone (for data conversion)
 * @param processDefault update "selected" fields in parameterBean
 * @return processed selection list
 */
public static List<ParameterSelectionChoice> makeSelectionList(Collection<ParameterSelectionChoice> selectionList,ScalarParameterBean parameterBean,Locale locale,TimeZone timeZone,boolean processDefault){
  boolean nullValueFound=false;
  List<ParameterSelectionChoice> processedList=parameterBean.getSelectionList();
  ParameterDefinition paramDef=parameterBean.getParameter();
  List<String> defaultValues=null;
  if (parameterBean.getDefaultValues() != null) {
    defaultValues=new ArrayList<String>(parameterBean.getDefaultValues());
  }
  parameterBean.setValueInList(false);
  if (selectionList != null) {
    boolean isDisplayTextInList=false;
    for (    ParameterSelectionChoice selectionItem : selectionList) {
      if (selectionItem == null)       continue;
      Object value=selectionItem.getValue();
      try {
        value=DataUtil.convert(value,paramDef.getDataType());
      }
 catch (      Exception e) {
        value=null;
      }
      String displayValue=DataUtil.getDisplayValue(value,timeZone);
      String label=selectionItem.getLabel();
      if (label == null || label.length() <= 0) {
        label=DataUtil.getDisplayValue(null,paramDef.getPattern(),value,locale,timeZone);
      }
      if (paramDef.isRequired()) {
        if (value == null || ("String_Node_Str".equals(value) && paramDef.getDataType() == IScalarParameterDefn.TYPE_STRING)) {
          continue;
        }
      }
      if (value == null) {
        nullValueFound=true;
        if (label == null) {
          label=IBirtConstants.NULL_VALUE_DISPLAY;
        }
      }
      selectionItem.setLabel(label);
      selectionItem.setValue(displayValue);
      processedList.add(selectionItem);
      if (processDefault) {
        if (!paramDef.isMultiValue() && DataUtil.equals(displayValue,parameterBean.getValue())) {
          parameterBean.setValueInList(true);
          if (!DataUtil.equals(label,parameterBean.getDisplayText())) {
            if (parameterBean.getParameter().isDistinct() && parameterBean.isDisplayTextInReq()) {
              selectionItem.setLabel(parameterBean.getDisplayText());
              isDisplayTextInList=true;
            }
          }
 else {
            isDisplayTextInList=true;
          }
        }
        if (paramDef.isMultiValue() && defaultValues != null) {
          if (DataUtil.contain((List<?>)defaultValues,displayValue,true)) {
            parameterBean.setDefaultValueInList(true);
            if (defaultValues != null) {
              defaultValues.remove(displayValue);
            }
          }
        }
 else         if (DataUtil.equals(displayValue,parameterBean.getDefaultValue())) {
          parameterBean.setDefaultValueInList(true);
          defaultValues.remove(displayValue);
        }
      }
    }
    if (processDefault) {
      if (parameterBean.isValueInList() && parameterBean.isDisplayTextInReq() && !isDisplayTextInList) {
        processedList.add(new ParameterSelectionChoice(parameterBean.getDisplayText(),parameterBean.getValue()));
        isDisplayTextInList=true;
      }
      if (defaultValues != null && defaultValues.size() > 0) {
        for (int i=0; i < defaultValues.size(); i++) {
          processedList.add(i,new ParameterSelectionChoice(defaultValues.get(i),defaultValues.get(i)));
        }
      }
      parameterBean.setDisplayTextInList(isDisplayTextInList);
    }
  }
  if (!nullValueFound && !parameterBean.isRequired()) {
    ParameterSelectionChoice selectionItem=new ParameterSelectionChoice(IBirtConstants.NULL_VALUE_DISPLAY,null);
    processedList.add(0,selectionItem);
  }
  return processedList;
}

Fixed version (ground truth):
/** 
 * Processes the given selection list, and adds the element to the given parameter bean's selection list.
 * @param selectionList original selection list to be processed
 * @param parameterBean scalar parameter bean
 * @param locale locale (for data conversion)
 * @param timeZone time zone (for data conversion)
 * @param processDefault update "selected" fields in parameterBean
 * @return processed selection list
 */
public static List<ParameterSelectionChoice> makeSelectionList(Collection<ParameterSelectionChoice> selectionList,ScalarParameterBean parameterBean,Locale locale,TimeZone timeZone,boolean processDefault){
  boolean nullValueFound=false;
  List<ParameterSelectionChoice> processedList=parameterBean.getSelectionList();
  ParameterDefinition paramDef=parameterBean.getParameter();
  List<String> defaultValues=null;
  if (parameterBean.getDefaultValues() != null) {
    defaultValues=new ArrayList<String>(parameterBean.getDefaultValues());
  }
  parameterBean.setValueInList(false);
  if (selectionList != null) {
    boolean isDisplayTextInList=false;
    for (    ParameterSelectionChoice selectionItem : selectionList) {
      if (selectionItem == null)       continue;
      Object value=selectionItem.getValue();
      try {
        value=DataUtil.convert(value,paramDef.getDataType());
      }
 catch (      Exception e) {
        value=null;
      }
      String displayValue=DataUtil.getDisplayValue(value,timeZone);
      String label=selectionItem.getLabel();
      if (label == null || label.length() <= 0) {
        label=DataUtil.getDisplayValue(null,paramDef.getPattern(),value,locale,timeZone);
      }
      if (paramDef.isRequired()) {
        if (value == null || ("String_Node_Str".equals(value) && paramDef.getDataType() == IScalarParameterDefn.TYPE_STRING)) {
          continue;
        }
      }
      if (value == null) {
        nullValueFound=true;
        if (label == null) {
          label=IBirtConstants.NULL_VALUE_DISPLAY;
        }
      }
      selectionItem.setLabel(label);
      selectionItem.setValue(displayValue);
      processedList.add(selectionItem);
      if (processDefault) {
        if (!paramDef.isMultiValue() && DataUtil.equals(displayValue,parameterBean.getValue())) {
          parameterBean.setValueInList(true);
          if (!DataUtil.equals(label,parameterBean.getDisplayText())) {
            if (parameterBean.getParameter().isDistinct() && parameterBean.isDisplayTextInReq()) {
              selectionItem.setLabel(parameterBean.getDisplayText());
              isDisplayTextInList=true;
            }
          }
 else {
            isDisplayTextInList=true;
          }
        }
        if (paramDef.isMultiValue() && defaultValues != null) {
          if (DataUtil.contain((List<?>)defaultValues,displayValue,true)) {
            parameterBean.setDefaultValueInList(true);
            defaultValues.remove(displayValue);
          }
        }
 else         if (DataUtil.equals(displayValue,parameterBean.getDefaultValue())) {
          parameterBean.setDefaultValueInList(true);
          if (defaultValues != null) {
            defaultValues.remove(displayValue);
          }
        }
      }
    }
    if (processDefault) {
      if (parameterBean.isValueInList() && parameterBean.isDisplayTextInReq() && !isDisplayTextInList) {
        processedList.add(new ParameterSelectionChoice(parameterBean.getDisplayText(),parameterBean.getValue()));
        isDisplayTextInList=true;
      }
      if (defaultValues != null && defaultValues.size() > 0) {
        for (int i=0; i < defaultValues.size(); i++) {
          processedList.add(i,new ParameterSelectionChoice(defaultValues.get(i),defaultValues.get(i)));
        }
      }
      parameterBean.setDisplayTextInList(isDisplayTextInList);
    }
  }
  if (!nullValueFound && !parameterBean.isRequired()) {
    ParameterSelectionChoice selectionItem=new ParameterSelectionChoice(IBirtConstants.NULL_VALUE_DISPLAY,null);
    processedList.add(0,selectionItem);
  }
  return processedList;
}