Program: 128996
Project: 128996
Buggy source:
public void run(){
  boolean continueRun=(keyPressed == SWT.TRAVERSE_TAB_NEXT || keyPressed == SWT.TRAVERSE_TAB_PREVIOUS || keyPressed == SWT.TRAVERSE_RETURN || keyPressed == SWT.F2);
  if (!continueRun || getTable().isDisposed()) {
    return;
  }
  List<B> inputList=TableViewerCreatorNotModifiable.this.getInputList();
  int currentIndexColumn=indexColumnStartFinal;
  int currentItemIndex=itemIndexStartFinal;
  CellEditor cellEditorToActivate=null;
  Control controlToFocusIn=null;
  boolean found=false;
  boolean firstLoop=true;
  while (true) {
    if (keyPressed == SWT.TRAVERSE_TAB_NEXT || !firstLoop && (keyPressed == SWT.F2 || keyPressed == SWT.TRAVERSE_RETURN)) {
      currentIndexColumn++;
      if (currentIndexColumn >= columns.size()) {
        currentIndexColumn=0;
        currentItemIndex++;
        if (currentItemIndex >= inputList.size()) {
          break;
        }
      }
    }
 else     if (keyPressed == SWT.TRAVERSE_TAB_PREVIOUS) {
      currentIndexColumn--;
      if (currentIndexColumn < 0) {
        currentIndexColumn=columns.size() - 1;
        currentItemIndex--;
        if (currentItemIndex < 0) {
          break;
        }
      }
    }
 else     if (keyPressed == SWT.TRAVERSE_RETURN) {
    }
    TableViewerCreatorColumnNotModifiable tableViewerCreatorColumn=columns.get(currentIndexColumn);
    if (tableViewerCreatorColumn.getTableEditorContent() != null) {
      TableItem tableItem=getTable().getItem(currentItemIndex);
      if (tableEditorManager != null) {
        List<TableEditor> tableEditorList=tableEditorManager.getTableEditorList();
        for (        TableEditor editor : tableEditorList) {
          if (editor.getColumn() == currentIndexColumn && editor.getItem() == tableItem) {
            controlToFocusIn=editor.getEditor();
            found=true;
            break;
          }
        }
      }
    }
 else     if (tableViewerCreatorColumn.getCellEditor() != null) {
      cellEditorToActivate=tableViewerCreatorColumn.getCellEditor();
      found=true;
    }
    firstLoop=false;
    if (found) {
      if (controlToFocusIn != null) {
        getTable().setSelection(currentItemIndex);
        controlToFocusIn.setFocus();
        break;
      }
 else       if (getCellModifier() != null && getCellModifier().canModify(inputList.get(currentItemIndex),getColumns().get(currentIndexColumn).getId()) && cellEditorToActivate != null) {
        TableViewerCreatorNotModifiable.this.getTableViewer().editElement(inputList.get(currentItemIndex),currentIndexColumn);
        break;
      }
 else {
        found=false;
      }
    }
  }
  keyPressed=0;
}

Fixed version (ground truth):
@Override public void run(){
  boolean continueRun=(keyPressed == SWT.TRAVERSE_TAB_NEXT || keyPressed == SWT.TRAVERSE_TAB_PREVIOUS || keyPressed == SWT.TRAVERSE_RETURN || keyPressed == SWT.F2);
  if (!continueRun || getTable().isDisposed()) {
    return;
  }
  List<B> inputList=TableViewerCreatorNotModifiable.this.getInputList();
  int currentIndexColumn=indexColumnStartFinal;
  int currentItemIndex=itemIndexStartFinal;
  CellEditor cellEditorToActivate=null;
  Control controlToFocusIn=null;
  boolean found=false;
  boolean firstLoop=true;
  while (true) {
    if (keyPressed == SWT.TRAVERSE_TAB_NEXT || !firstLoop && (keyPressed == SWT.F2 || keyPressed == SWT.TRAVERSE_RETURN)) {
      currentIndexColumn++;
      if (currentIndexColumn >= columns.size()) {
        currentIndexColumn=0;
        currentItemIndex++;
        if (currentItemIndex >= inputList.size()) {
          break;
        }
      }
    }
 else     if (keyPressed == SWT.TRAVERSE_TAB_PREVIOUS) {
      currentIndexColumn--;
      if (currentIndexColumn < 0) {
        currentIndexColumn=columns.size() - 1;
        currentItemIndex--;
        if (currentItemIndex < 0) {
          break;
        }
      }
    }
 else     if (keyPressed == SWT.TRAVERSE_RETURN) {
    }
    TableViewerCreatorColumnNotModifiable tableViewerCreatorColumn=columns.get(currentIndexColumn);
    if (tableViewerCreatorColumn.getTableEditorContent() != null) {
      TableItem tableItem=getTable().getItem(currentItemIndex);
      if (tableEditorManager != null) {
        List<TableEditor> tableEditorList=tableEditorManager.getTableEditorList();
        for (        TableEditor editor : tableEditorList) {
          if (editor.getColumn() == currentIndexColumn && editor.getItem() == tableItem) {
            controlToFocusIn=editor.getEditor();
            found=true;
            break;
          }
        }
      }
    }
 else     if (tableViewerCreatorColumn.getCellEditor() != null) {
      cellEditorToActivate=tableViewerCreatorColumn.getCellEditor();
      found=true;
    }
    firstLoop=false;
    if (found) {
      if (controlToFocusIn != null) {
        getTable().setSelection(currentItemIndex);
        controlToFocusIn.setFocus();
        break;
      }
 else       if (getCellModifier() != null && getCellModifier().canModify(inputList.get(currentItemIndex),getColumns().get(currentIndexColumn).getId()) && cellEditorToActivate != null) {
        TableViewerCreatorNotModifiable.this.getTableViewer().editElement(inputList.get(currentItemIndex),currentIndexColumn);
        break;
      }
 else {
        found=false;
      }
    }
  }
  keyPressed=0;
}