fUndoStack.push((RefactoringDescriptor) fRedoQueue.removeFirst());
		public void historyNotification(final OperationHistoryEvent event) {			IUndoableOperation operation= event.getOperation();			if (operation instanceof TriggeredOperations)				operation= ((TriggeredOperations) operation).getTriggeringOperation();			UndoableOperation2ChangeAdapter adapter= null;			if (operation instanceof UndoableOperation2ChangeAdapter)				adapter= (UndoableOperation2ChangeAdapter) operation;			if (adapter != null) {				final Change change= adapter.getChange();				switch (event.getEventType()) {					case OperationHistoryEvent.ABOUT_TO_EXECUTE: {						fDescriptor= null;						final ChangeDescriptor changeDescriptor= change.getDescriptor();						if (changeDescriptor instanceof RefactoringChangeDescriptor) {							fDescriptor= ((RefactoringChangeDescriptor) changeDescriptor).getRefactoringDescriptor();							fireAboutToPerformEvent(new RefactoringDescriptorProxyAdapter(fDescriptor));						}						break;					}					case OperationHistoryEvent.DONE: {						if (fDescriptor != null) {							if (!fDescriptor.getID().equals(RefactoringDescriptor.ID_UNKNOWN)) {								if (fOverrideTimeStamp >= 0)									fDescriptor.setTimeStamp(fOverrideTimeStamp);								else									fDescriptor.setTimeStamp(System.currentTimeMillis());							}							fUndoStack.push(fDescriptor);							fireRefactoringPerformedEvent(new RefactoringDescriptorProxyAdapter(fDescriptor));							fDescriptor= null;						} else							fUndoStack.push(NO_REFACTORING);						break;					}					case OperationHistoryEvent.ABOUT_TO_UNDO: {						final RefactoringDescriptor descriptor= fUndoStack.peek();						if (descriptor != NO_REFACTORING)							fireAboutToUndoEvent(new RefactoringDescriptorProxyAdapter(descriptor));						break;					}					case OperationHistoryEvent.UNDONE: {						fRedoQueue.addFirst(fUndoStack.peek());						fUndoStack.pop();						final RefactoringDescriptor descriptor= (RefactoringDescriptor) fRedoQueue.getFirst();						if (descriptor != NO_REFACTORING)							fireRefactoringUndoneEvent(new RefactoringDescriptorProxyAdapter(descriptor));						break;					}					case OperationHistoryEvent.ABOUT_TO_REDO: {						final RefactoringDescriptor descriptor= (RefactoringDescriptor) fRedoQueue.getFirst();						if (descriptor != NO_REFACTORING)							fireAboutToRedoEvent(new RefactoringDescriptorProxyAdapter(descriptor));						break;					}					case OperationHistoryEvent.REDONE: {						final RefactoringDescriptor descriptor= fUndoStack.peek();						fUndoStack.push((RefactoringDescriptor) fRedoQueue.removeFirst());						if (descriptor != NO_REFACTORING)							fireRefactoringRedoneEvent(new RefactoringDescriptorProxyAdapter(descriptor));						break;					}				}			}		}