# Interface IUndoManager

public interface IUndoManager
An undo manager keeps track of performed changes. Use the method `addUndo` to add change objects to the undo stack and `performUndo` and `performRedo` to undo or redo changes.

This interface is not intended to be implemented by clients. Clients should use the method `RefactoringCore.getUndoManager()` to access the refactoring undo manager.

As of 3.1 the implementation of the refactoring undo manager is based on the `IOperationHistory` provided by the `org.eclipse.core.commands` plug-in.

As of 3.2 clients which need to examine refactorings which have been performed, undone or redone should use `IRefactoringHistoryService` for enhanced functionality.

Since:
  3.0
See Also:
  - `IOperationHistory`
Restriction:
  This interface is not intended to be implemented by clients.
Restriction:
  This interface is not intended to be extended by clients.

## Method Summary

Modifier and Type
Method
Description
`void`
`aboutToPerformChange(Change change)`
The infrastructure is going to perform the given change.
`void`
`addListener(IUndoManagerListener listener)`
Adds a listener to the undo manager.
`void`
`addUndo(String name, Change change)`
Adds a new undo change to this undo manager.
`boolean`
`anythingToRedo()`
Returns `true` if there is anything to redo, otherwise `false`.
`boolean`
`anythingToUndo()`
Returns `true` if there is anything to undo, otherwise `false`.
`void`
`changePerformed(Change change)`
Deprecated.
use #changePerformed(Change, boolean) instead
`void`
`changePerformed(Change change, boolean successful)`
The infrastructure has performed the given change.
`void`
`flush()`
Flushes the undo manager's undo and redo stacks.
`String`
`peekRedoName()`
Returns the name of the top most redo.
`String`
`peekUndoName()`
Returns the name of the top most undo.
`void`
`performRedo(IValidationCheckResultQuery query, IProgressMonitor pm)`
Redo the top most redo change.
`void`
`performUndo(IValidationCheckResultQuery query, IProgressMonitor pm)`
Undo the top most undo change.
`void`
`removeListener(IUndoManagerListener listener)`
Removes the given listener from this undo manager.
`void`
`shutdown()`
Shut down the undo manager.

## Method Details

### addListener

void addListener(IUndoManagerListener listener)
Adds a listener to the undo manager. Does nothing if the listener is already present.

Parameters:
  `listener` - the listener to be added to the undo manager

### removeListener

void removeListener(IUndoManagerListener listener)
Removes the given listener from this undo manager. Does nothing if the listener isn't registered with this undo manager

Parameters:
  `listener` - the listener to be removed

### aboutToPerformChange

void aboutToPerformChange(Change change)
The infrastructure is going to perform the given change. If a client calls this method it must make sure that the corresponding method `changePerformed(Change)` is called after the change got executed. A typically code snippet looks as follows:

      Change change= ...;
      try {
        undoManager.aboutToPerformChange(change);
        // execute change
      } finally {
        undoManager.changePerformed(change);
      }

Parameters:
  `change` - the change to be performed.

### changePerformed

@Deprecated void changePerformed(Change change)
Deprecated.
use #changePerformed(Change, boolean) instead
The infrastructure has performed the given change.

Parameters:
  `change` - the change that was performed

### changePerformed

void changePerformed(Change change, boolean successful)
The infrastructure has performed the given change.

Parameters:
  `change` - the change that was performed
  `successful` - `true` if the change got executed successful; `false` otherwise.
Since:
  3.1

### addUndo

void addUndo(String name, Change change)
Adds a new undo change to this undo manager.

Parameters:
  `name` - the name presented on the undo stack for the provided undo change. The name must be human readable.
  `change` - the undo change

### anythingToUndo

boolean anythingToUndo()
Returns `true` if there is anything to undo, otherwise `false`.

Returns:
  `true` if there is anything to undo, otherwise `false`

### peekUndoName

String peekUndoName()
Returns the name of the top most undo.

Returns:
  the top most undo name. Returns `null` if there aren't any changes to undo.

### performUndo

void performUndo(IValidationCheckResultQuery query, IProgressMonitor pm) throws CoreException
Undo the top most undo change.

Parameters:
  `query` - a proceed query to decide how to proceed if the validation checking of the undo change to perform returns a non OK status and the status isn't a fatal error. If `null` is passed in the undo proceeds if the status is not a fatal error.
  `pm` - a progress monitor to report progress during performing the undo change
Throws:
  `CoreException` - if performing the undo caused an exception

### anythingToRedo

boolean anythingToRedo()
Returns `true` if there is anything to redo, otherwise `false`.

Returns:
  `true` if there is anything to redo, otherwise `false`

### peekRedoName

String peekRedoName()
Returns the name of the top most redo.

Returns:
  the top most redo name. Returns `null` if there are no any changes to redo.

### performRedo

void performRedo(IValidationCheckResultQuery query, IProgressMonitor pm) throws CoreException
Redo the top most redo change.

Parameters:
  `query` - a proceed query to decide how to proceed if the validation checking of the redo change to perform returns a non OK status. If `null` is passed in the undo proceeds if the status is not a fatal error.
  `pm` - a progress monitor to report progress during performing the redo change
Throws:
  `CoreException` - if performing the redo caused an exception

### flush

void flush()
Flushes the undo manager's undo and redo stacks.

### shutdown

void shutdown()
Shut down the undo manager.