Program: 92135
Project: 92135
Buggy source:
@Override @SuppressWarnings("String_Node_Str") public synchronized T getNext(ITmfContext context){
  if (!(context instanceof TmfExperimentContext)) {
    return null;
  }
  if (fTraces == null) {
    return null;
  }
  TmfExperimentContext expContext=(TmfExperimentContext)context;
  final int lastTrace=expContext.getLastTrace();
  if (lastTrace != TmfExperimentContext.NO_TRACE) {
    final ITmfContext traceContext=expContext.getContexts()[lastTrace];
    expContext.getEvents()[lastTrace]=fTraces[lastTrace].getNext(traceContext);
    expContext.setLastTrace(TmfExperimentContext.NO_TRACE);
  }
  int trace=TmfExperimentContext.NO_TRACE;
  ITmfTimestamp timestamp=TmfTimestamp.BIG_CRUNCH;
  for (int i=0; i < fTraces.length; i++) {
    final ITmfEvent event=expContext.getEvents()[i];
    if (event != null && event.getTimestamp() != null) {
      final ITmfTimestamp otherTS=event.getTimestamp();
      if (otherTS.compareTo(timestamp,true) < 0) {
        trace=i;
        timestamp=otherTS;
      }
    }
  }
  T event=null;
  if (trace != TmfExperimentContext.NO_TRACE) {
    event=(T)expContext.getEvents()[trace];
    if (event != null) {
      updateAttributes(expContext,event.getTimestamp());
      expContext.increaseRank();
      expContext.setLastTrace(trace);
      final ITmfContext traceContext=expContext.getContexts()[trace];
      TmfExperimentLocation location=(TmfExperimentLocation)expContext.getLocation();
      if (location != null) {
        location.getLocation().getLocations()[trace]=traceContext.getLocation().clone();
      }
      fExperimentContext=expContext.clone();
      processEvent(event);
    }
  }
  return event;
}

Fixed version (ground truth):
@Override @SuppressWarnings("String_Node_Str") public synchronized T getNext(ITmfContext context){
  if (!(context instanceof TmfExperimentContext)) {
    return null;
  }
  if (fTraces == null) {
    return null;
  }
  TmfExperimentContext expContext=(TmfExperimentContext)context;
  final int lastTrace=expContext.getLastTrace();
  if (lastTrace != TmfExperimentContext.NO_TRACE) {
    final ITmfContext traceContext=expContext.getContexts()[lastTrace];
    expContext.getEvents()[lastTrace]=fTraces[lastTrace].getNext(traceContext);
    expContext.setLastTrace(TmfExperimentContext.NO_TRACE);
  }
  int trace=TmfExperimentContext.NO_TRACE;
  ITmfTimestamp timestamp=TmfTimestamp.BIG_CRUNCH;
  for (int i=0; i < fTraces.length; i++) {
    final ITmfEvent event=expContext.getEvents()[i];
    if (event != null && event.getTimestamp() != null) {
      final ITmfTimestamp otherTS=event.getTimestamp();
      if (otherTS.compareTo(timestamp,true) < 0) {
        trace=i;
        timestamp=otherTS;
      }
    }
  }
  T event=null;
  if (trace != TmfExperimentContext.NO_TRACE) {
    event=(T)expContext.getEvents()[trace];
    if (event != null) {
      updateAttributes(expContext,event.getTimestamp());
      expContext.increaseRank();
      expContext.setLastTrace(trace);
      final ITmfContext traceContext=expContext.getContexts()[trace];
      TmfExperimentLocation location=(TmfExperimentLocation)expContext.getLocation();
      if (location != null) {
        location.getLocation().getLocations()[trace]=traceContext.getLocation().clone();
      }
      processEvent(event);
    }
  }
  return event;
}