Program: 31304
Project: 31304
Buggy source:
@SuppressFBWarnings({"String_Node_Str"}) public ResampledRecordSource(RecordSource recordSource,int timestampColumnIndex,@Transient ObjHashSet<String> keyColumns,ObjList<AggregatorFunction> aggregators,TimestampSampler sampler,int pageSize){
  int keyColumnsSize=keyColumns.size();
  this.keyIndices=new IntList(keyColumnsSize);
  ObjHashSet<String> keyCols=new ObjHashSet<>();
  RecordMetadata rm=recordSource.getMetadata();
  this.tsIndex=timestampColumnIndex;
  keyCols.add(rm.getColumnName(tsIndex));
  for (int i=0; i < keyColumnsSize; i++) {
    keyCols.add(keyColumns.get(i));
    int index=rm.getColumnIndex(keyColumns.get(i));
    if (index != tsIndex) {
      keyIndices.add(index);
    }
  }
  this.aggregators=aggregators;
  this.sampler=sampler;
  ObjList<MapRecordValueInterceptor> interceptors=null;
  ObjList<RecordColumnMetadata> columns=AggregationUtils.TL_COLUMNS.get();
  columns.clear();
  int index=0;
  for (int i=0, sz=aggregators.size(); i < sz; i++) {
    AggregatorFunction func=aggregators.getQuick(i);
    int n=columns.size();
    func.prepare(columns,index);
    index+=columns.size() - n;
    if (func instanceof MapRecordValueInterceptor) {
      if (interceptors == null) {
        interceptors=new ObjList<>();
      }
      interceptors.add((MapRecordValueInterceptor)func);
    }
  }
  this.interceptors=interceptors;
  this.storageFacade=new DirectMapStorageFacade(columns.size(),keyIndices);
  this.metadata=new DirectMapMetadata(rm,keyCols,columns);
  this.record=new DirectMapRecord(this.storageFacade);
  ObjList<ColumnType> types=AggregationUtils.TL_COLUMN_TYPES.get();
  types.clear();
  for (int i=0, n=columns.size(); i < n; i++) {
    types.add(columns.getQuick(i).getType());
  }
  this.map=new DirectMap(pageSize,keyCols.size(),types);
  this.recordSource=recordSource;
}

Fixed version (ground truth):
@SuppressFBWarnings({"String_Node_Str"}) public ResampledRecordSource(RecordSource recordSource,int timestampColumnIndex,@Transient ObjHashSet<String> keyColumns,ObjList<AggregatorFunction> aggregators,TimestampSampler sampler,int pageSize){
  int keyColumnsSize=keyColumns.size();
  this.keyIndices=new IntList(keyColumnsSize);
  ObjHashSet<String> keyCols=new ObjHashSet<>();
  RecordMetadata rm=recordSource.getMetadata();
  this.tsIndex=timestampColumnIndex;
  keyCols.add(rm.getColumnName(tsIndex));
  for (int i=0; i < keyColumnsSize; i++) {
    keyCols.add(keyColumns.get(i));
    int index=rm.getColumnIndex(keyColumns.get(i));
    if (index != tsIndex) {
      keyIndices.add(index);
    }
  }
  this.aggregators=aggregators;
  this.sampler=sampler;
  ObjList<MapRecordValueInterceptor> interceptors=null;
  ObjList<RecordColumnMetadata> columns=AggregationUtils.TL_COLUMNS.get();
  columns.clear();
  int index=0;
  for (int i=0, sz=aggregators.size(); i < sz; i++) {
    AggregatorFunction func=aggregators.getQuick(i);
    int n=columns.size();
    func.prepare(columns,index);
    index+=columns.size() - n;
    if (func instanceof MapRecordValueInterceptor) {
      if (interceptors == null) {
        interceptors=new ObjList<>();
      }
      interceptors.add((MapRecordValueInterceptor)func);
    }
  }
  this.interceptors=interceptors;
  this.storageFacade=new DirectMapStorageFacade(columns.size() + 1,keyIndices);
  this.metadata=new DirectMapMetadata(rm,keyCols,columns);
  this.record=new DirectMapRecord(this.storageFacade);
  ObjList<ColumnType> types=AggregationUtils.TL_COLUMN_TYPES.get();
  types.clear();
  for (int i=0, n=columns.size(); i < n; i++) {
    types.add(columns.getQuick(i).getType());
  }
  this.map=new DirectMap(pageSize,keyCols.size(),types);
  this.recordSource=recordSource;
}