Program: 92731
Project: 92731
Buggy source:
/** 
 * One of the spinners has been updated. Synchronize the other widgets.
 */
public void synchTimeFrameWidgets(SpinnerGroup trigger){
  boolean trangeUpdated=false;
  ITmfTimestamp startTime=fStartGroup.getCurrentTime();
  ITmfTimestamp endTime=fEndGroup.getCurrentTime();
  ITmfTimestamp timeRange=fRangeGroup.getCurrentTime();
  ITmfTimestamp currentTime=fCurrentGroup.getCurrentTime();
  if (trigger == fStartGroup) {
    if (startTime.compareTo(endTime,false) > 0) {
      endTime=startTime;
      trangeUpdated=true;
    }
  }
  if (trigger == fEndGroup) {
    if (endTime.compareTo(startTime,false) < 0) {
      startTime=endTime;
      trangeUpdated=true;
    }
  }
  if (trigger == fRangeGroup) {
    long start=startTime.getValue();
    long span=timeRange.getValue();
    ITmfTimestamp ts=new TmfTimestamp(start + span,startTime.getScale(),0);
    if (ts.compareTo(fTraceEndTime,false) > 0) {
      ts=fTraceEndTime.clone();
    }
    endTime=ts;
    trangeUpdated=true;
  }
  TmfTimeRange subrange=new TmfTimeRange(startTime,endTime);
  int scale=startTime.getScale();
  ITmfTimestamp interval=(TmfTimestamp)startTime.getDelta(endTime);
  fStartGroup.setContent(fTraceTimeRange,startTime);
  fEndGroup.setContent(fTraceTimeRange,endTime);
  fRangeGroup.setContent(fTraceSpan,interval);
  fCurrentGroup.setContent(subrange,currentTime);
  updateSlider(subrange,currentTime);
  if (fupdateExternalListeners) {
    if (!fCurrentTime.equals(currentTime)) {
      fCurrentTime=currentTime;
      broadcast(new TmfTimeSynchSignal(this,currentTime));
    }
    if (trangeUpdated) {
      TmfTimeRange trange=new TmfTimeRange(startTime,endTime);
      broadcast(new TmfRangeSynchSignal(this,trange,currentTime));
    }
  }
}

Fixed version (ground truth):
/** 
 * One of the spinners has been updated. Synchronize the other widgets.
 */
public void synchTimeFrameWidgets(SpinnerGroup trigger){
  boolean trangeUpdated=false;
  ITmfTimestamp startTime=fStartGroup.getCurrentTime();
  ITmfTimestamp endTime=fEndGroup.getCurrentTime();
  ITmfTimestamp timeRange=fRangeGroup.getCurrentTime();
  ITmfTimestamp currentTime=fCurrentGroup.getCurrentTime();
  if (trigger == fStartGroup) {
    if (startTime.compareTo(endTime,false) > 0) {
      endTime=startTime;
      trangeUpdated=true;
    }
  }
  if (trigger == fEndGroup) {
    if (endTime.compareTo(startTime,false) < 0) {
      startTime=endTime;
      trangeUpdated=true;
    }
  }
  if (trigger == fRangeGroup) {
    long start=startTime.getValue();
    long span=timeRange.getValue();
    ITmfTimestamp ts=new TmfTimestamp(start + span,startTime.getScale(),0);
    if (ts.compareTo(fTraceEndTime,false) > 0) {
      ts=fTraceEndTime.clone();
    }
    endTime=ts;
    trangeUpdated=true;
  }
  TmfTimeRange subrange=new TmfTimeRange(startTime,endTime);
  ITmfTimestamp interval=(TmfTimestamp)startTime.getDelta(endTime);
  fStartGroup.setContent(fTraceTimeRange,startTime);
  fEndGroup.setContent(fTraceTimeRange,endTime);
  fRangeGroup.setContent(fTraceSpan,interval);
  fCurrentGroup.setContent(subrange,currentTime);
  updateSlider(subrange,currentTime);
  if (fupdateExternalListeners) {
    if (!fCurrentTime.equals(currentTime)) {
      fCurrentTime=currentTime;
      broadcast(new TmfTimeSynchSignal(this,currentTime));
    }
    if (trangeUpdated) {
      TmfTimeRange trange=new TmfTimeRange(startTime,endTime);
      broadcast(new TmfRangeSynchSignal(this,trange,currentTime));
    }
  }
}