Program: 128690
Project: 128690
Buggy source:
protected void addListeners(){
  if (useCustomItemColoring) {
    addEraseItemListener();
  }
  final MouseListener mouseListener=new MouseListener(){
    @Override public void mouseDoubleClick(    MouseEvent e){
    }
    @Override public void mouseDown(    MouseEvent mouseEvent){
      controlClicked=mouseEvent.getSource();
    }
    @Override public void mouseUp(    MouseEvent e){
    }
  }
;
  final TraverseListener traverseListenerForControls=new TraverseListener(){
    @Override public void keyTraversed(    TraverseEvent e){
      if (!keyboardManagementForCellEdition) {
        return;
      }
      int key=e.detail;
      if (key == SWT.TRAVERSE_TAB_NEXT || key == SWT.TRAVERSE_TAB_PREVIOUS) {
        keyPressed=key;
        e.doit=false;
        editOtherEditor((Control)e.getSource());
      }
 else       if (key == SWT.TRAVERSE_RETURN) {
        keyPressed=key;
        if (getTable().getSelectionIndex() != -1 && getTable().isFocusControl()) {
          editOtherEditor(null);
        }
 else {
          forceTableFocus();
        }
      }
 else       if (key == SWT.TRAVERSE_ESCAPE) {
        forceTableFocus();
      }
 else {
      }
    }
    /** 
 * DOC amaumont Comment method "forceTableFocus".
 */
    private void forceTableFocus(){
      new AsynchronousThreading(10,false,getTable().getDisplay(),new Runnable(){
        @Override public void run(){
          getTable().forceFocus();
        }
      }
).start();
    }
  }
;
  final TraverseListener traverseListenerForTable=new TraverseListener(){
    @Override public void keyTraversed(    TraverseEvent e){
      if (!keyboardManagementForCellEdition) {
        return;
      }
      int key=e.detail;
      if (key == SWT.TRAVERSE_TAB_NEXT || key == SWT.TRAVERSE_TAB_PREVIOUS) {
        keyPressed=key;
        e.doit=false;
        editOtherEditor(null);
      }
 else       if (key == SWT.TRAVERSE_RETURN && getTable().getSelectionIndex() != -1 && getTable().isFocusControl()) {
        keyPressed=key;
        editOtherEditor(null);
      }
    }
  }
;
  getTable().addTraverseListener(traverseListenerForTable);
  final KeyListener keyListenerForTable=new KeyListener(){
    @Override public void keyPressed(    KeyEvent e){
      if (!keyboardManagementForCellEdition) {
        return;
      }
      int key=e.keyCode;
      if (key == SWT.F2) {
        keyPressed=key;
        editOtherEditor(null);
      }
    }
    @Override public void keyReleased(    KeyEvent e){
    }
  }
;
  getTable().addKeyListener(keyListenerForTable);
  getTable().addDisposeListener(new DisposeListener(){
    @Override public void widgetDisposed(    DisposeEvent e){
      if (tableEditorManager != null) {
        tableEditorManager.release();
      }
    }
  }
);
  if (tableEditorManager != null) {
    tableEditorManager.addListener(new ITableEditorManagerListener(){
      @Override public void notifyEvent(      TableEditorManagerEvent event){
        Control editor=event.getTableEditor().getEditor();
        if (event.getEventType() == EVENT_TYPE.CONTROL_CREATED) {
          editor.addMouseListener(mouseListener);
          editor.addTraverseListener(traverseListenerForControls);
        }
      }
    }
);
  }
  for (  TableViewerCreatorColumnNotModifiable column : columns) {
    CellEditor cellEditor=column.getCellEditor();
    if (cellEditor != null && cellEditor.getControl() != null) {
      addTraverseListenerRecursivly(cellEditor.getControl(),traverseListenerForControls);
    }
  }
}

Fixed version (ground truth):
protected void addListeners(){
  if (useCustomItemColoring) {
    addEraseItemListener();
  }
  final MouseListener mouseListener=new MouseListener(){
    @Override public void mouseDoubleClick(    MouseEvent e){
    }
    @Override public void mouseDown(    MouseEvent mouseEvent){
      controlClicked=mouseEvent.getSource();
    }
    @Override public void mouseUp(    MouseEvent e){
    }
  }
;
  final TraverseListener traverseListenerForControls=new TraverseListener(){
    @Override public void keyTraversed(    TraverseEvent e){
      if (!keyboardManagementForCellEdition) {
        return;
      }
      int key=e.detail;
      if (key == SWT.TRAVERSE_TAB_NEXT || key == SWT.TRAVERSE_TAB_PREVIOUS) {
        keyPressed=key;
        e.doit=false;
        editOtherEditor((Control)e.getSource());
      }
 else       if (key == SWT.TRAVERSE_RETURN) {
        keyPressed=key;
        if (getTable().getSelectionIndex() != -1 && getTable().isFocusControl()) {
          editOtherEditor(null);
        }
 else {
          forceTableFocus();
        }
      }
 else       if (key == SWT.TRAVERSE_ESCAPE) {
        forceTableFocus();
      }
 else {
      }
    }
    /** 
 * DOC amaumont Comment method "forceTableFocus".
 */
    private void forceTableFocus(){
      new AsynchronousThreading(10,false,getTable().getDisplay(),new Runnable(){
        @Override public void run(){
          if (!getTable().isDisposed()) {
            getTable().forceFocus();
          }
        }
      }
).start();
    }
  }
;
  final TraverseListener traverseListenerForTable=new TraverseListener(){
    @Override public void keyTraversed(    TraverseEvent e){
      if (!keyboardManagementForCellEdition) {
        return;
      }
      int key=e.detail;
      if (key == SWT.TRAVERSE_TAB_NEXT || key == SWT.TRAVERSE_TAB_PREVIOUS) {
        keyPressed=key;
        e.doit=false;
        editOtherEditor(null);
      }
 else       if (key == SWT.TRAVERSE_RETURN && getTable().getSelectionIndex() != -1 && getTable().isFocusControl()) {
        keyPressed=key;
        editOtherEditor(null);
      }
    }
  }
;
  getTable().addTraverseListener(traverseListenerForTable);
  final KeyListener keyListenerForTable=new KeyListener(){
    @Override public void keyPressed(    KeyEvent e){
      if (!keyboardManagementForCellEdition) {
        return;
      }
      int key=e.keyCode;
      if (key == SWT.F2) {
        keyPressed=key;
        editOtherEditor(null);
      }
    }
    @Override public void keyReleased(    KeyEvent e){
    }
  }
;
  getTable().addKeyListener(keyListenerForTable);
  getTable().addDisposeListener(new DisposeListener(){
    @Override public void widgetDisposed(    DisposeEvent e){
      if (tableEditorManager != null) {
        tableEditorManager.release();
      }
    }
  }
);
  if (tableEditorManager != null) {
    tableEditorManager.addListener(new ITableEditorManagerListener(){
      @Override public void notifyEvent(      TableEditorManagerEvent event){
        Control editor=event.getTableEditor().getEditor();
        if (event.getEventType() == EVENT_TYPE.CONTROL_CREATED) {
          editor.addMouseListener(mouseListener);
          editor.addTraverseListener(traverseListenerForControls);
        }
      }
    }
);
  }
  for (  TableViewerCreatorColumnNotModifiable column : columns) {
    CellEditor cellEditor=column.getCellEditor();
    if (cellEditor != null && cellEditor.getControl() != null) {
      addTraverseListenerRecursivly(cellEditor.getControl(),traverseListenerForControls);
    }
  }
}