IUndoContext context= (IUndoContext)ResourcesPlugin.getWorkspace().getAdapter(IUndoContext.class);
IWorkbenchPartSite workbenchpartSite = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor().getSite();
IOperationHistory operationHistory = PlatformUI.getWorkbench().getOperationSupport().getOperationHistory();
UndoActionHandler undoAction = new UndoActionHandler(workbenchpartSite, context);
IUndoableOperation[] operations = operationHistory
.getUndoHistory(IOperationHistory.GLOBAL_UNDO_CONTEXT);
System.out.println("operations's length : "+operations.length);
for(int i = operations.length - 1; i >= 0; i--){
if(operations[i].canUndo()){
try {
System.out.println("undo Label : " + operations[i].getLabel());
operationHistory.undoOperation(operations[i], null, undoAction);
} catch (ExecutionException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
如果是重构的撤销,operations[i].getLabel()会输出 Extract Class 或者 Move Method等具体的重构操作名称。