Program: 107826
Project: 107826
Buggy source:
/** 
 * Analyzes the data
 */
<T>void analyze(){
  Collections.sort(values,comparator);
  if (values.size() == 0) {
    min=DataType.NULL_VALUE;
    max=DataType.NULL_VALUE;
    mode=DataType.NULL_VALUE;
    median=DataType.NULL_VALUE;
    distinctNumberOfValues=0;
    numberOfMeasures=0;
  }
 else {
    min=values.get(0);
    max=values.get(values.size() - 1);
    if (values.size() % 2 == 1) {
      median=values.get(values.size() / 2);
    }
 else     if (type != null && type instanceof DataTypeWithRatioScale<?>) {
      @SuppressWarnings("String_Node_Str") DataType<T> dType=(DataType<T>)type;
      @SuppressWarnings("String_Node_Str") DataTypeWithRatioScale<T> rType=(DataTypeWithRatioScale<T>)dType;
      double median1=rType.toDouble(dType.parse(values.get(values.size() / 2 - 1)));
      double median2=rType.toDouble(dType.parse(values.get(values.size() / 2)));
      median=dType.format(rType.fromDouble((median1 + median2) / 2d));
    }
 else {
      String median1=values.get(values.size() / 2 - 1);
      String median2=values.get(values.size() / 2);
      if (median1 == median2) {
        median=median1;
      }
 else {
        median=DataType.NULL_VALUE;
      }
    }
    numberOfMeasures=values.size();
    Set<String> distinct=new HashSet<String>();
    distinct.addAll(values);
    distinctNumberOfValues=distinct.size();
    distinct.clear();
    int count=0;
    int index=0;
    mode=values.get(0);
    while (index < values.size()) {
      int nIndex=moveWhileEqual(index,values);
      int nCount=nIndex - index;
      if (nCount > count) {
        mode=values.get(index);
        count=nCount;
      }
      index=nIndex;
    }
  }
  values.clear();
}

Fixed version (ground truth):
/** 
 * Analyzes the data
 */
void analyze(){
  Collections.sort(values,comparator);
  if (values.size() == 0) {
    min=DataType.NULL_VALUE;
    max=DataType.NULL_VALUE;
    mode=DataType.NULL_VALUE;
    median=DataType.NULL_VALUE;
    distinctNumberOfValues=0;
    numberOfMeasures=0;
  }
 else {
    min=values.get(0);
    max=values.get(values.size() - 1);
    if (values.size() % 2 == 1) {
      median=values.get(values.size() / 2);
    }
 else     if (type != null && type instanceof DataTypeWithRatioScale<?>) {
      DataType<T> dType=(DataType<T>)type;
      @SuppressWarnings("String_Node_Str") DataTypeWithRatioScale<T> rType=(DataTypeWithRatioScale<T>)dType;
      double median1=rType.toDouble(dType.parse(values.get(values.size() / 2 - 1)));
      double median2=rType.toDouble(dType.parse(values.get(values.size() / 2)));
      median=dType.format(rType.fromDouble((median1 + median2) / 2d));
    }
 else {
      String median1=values.get(values.size() / 2 - 1);
      String median2=values.get(values.size() / 2);
      if (median1 == median2) {
        median=median1;
      }
 else {
        median=DataType.NULL_VALUE;
      }
    }
    numberOfMeasures=values.size();
    Set<String> distinct=new HashSet<String>();
    distinct.addAll(values);
    distinctNumberOfValues=distinct.size();
    distinct.clear();
    int count=0;
    int index=0;
    mode=values.get(0);
    while (index < values.size()) {
      int nIndex=moveWhileEqual(index,values);
      int nCount=nIndex - index;
      if (nCount > count) {
        mode=values.get(index);
        count=nCount;
      }
      index=nIndex;
    }
    if (type != null) {
      min=type.format(type.parse(min));
      max=type.format(type.parse(max));
      mode=type.format(type.parse(mode));
      median=type.format(type.parse(median));
    }
  }
  values.clear();
}