下面列出了怎么用org.eclipse.jface.text.IUndoManager的API类实例代码及写法,或者点击链接到github查看源代码。
/**
* @see https://bugs.eclipse.org/bugs/show_bug.cgi?id=354123
*/
@Test
public void testUndoRedo() throws Exception {
pushKey('a', 0);
Assert.assertEquals(1, events.size());
Assert.assertEquals("fooa", getFirstExportedObjectInLastEventDelta()
.getQualifiedName().getLastSegment());
IUndoManager undoManager = ((XtextSourceViewer) editor.getInternalSourceViewer()).getUndoManager();
undoManager.undo();
syncUtil.yieldToQueuedDisplayJobs(new NullProgressMonitor());
syncUtil.waitForReconciler(editor);
Assert.assertEquals(2, events.size());
Assert.assertNull(Iterables.getLast(events).getDeltas().get(0).getNew());
undoManager.redo();
syncUtil.yieldToQueuedDisplayJobs(new NullProgressMonitor());
syncUtil.waitForReconciler(editor);
Assert.assertEquals(3, events.size());
Assert.assertEquals("fooa", getFirstExportedObjectInLastEventDelta()
.getQualifiedName().getLastSegment());
Iterables.getLast(events);
}
/**
* Saves input code to model
*/
private void saveModel( )
{
if ( isCodeModified( ) && editObject instanceof DesignElementHandle )
{
saveEditorContentsDE( (DesignElementHandle) editObject,
isSaveScript );
}
setIsModified( false );
( (IFormPage) getParentEditor( ) ).getEditor( )
.editorDirtyStateChanged( );
firePropertyChange( PROP_DIRTY );
SourceViewer viewer = getViewer( );
IUndoManager undoManager = viewer == null ? null
: viewer.getUndoManager( );
if ( undoManager != null )
{
undoManager.endCompoundChange( );
}
cleanPoint = getUndoLevel( );
}
public void startRecording(XtextEditor editor) {
this.editor = editor;
ISourceViewer viewer = editor.getInternalSourceViewer();
if (viewer instanceof ITextViewerExtension6) {
IUndoManager undoManager = ((ITextViewerExtension6) viewer).getUndoManager();
if (undoManager instanceof IUndoManagerExtension) {
IUndoManagerExtension undoManagerExtension = (IUndoManagerExtension) undoManager;
IUndoContext undoContext = undoManagerExtension.getUndoContext();
IOperationHistory operationHistory = OperationHistoryFactory.getOperationHistory();
startingUndoOperation = operationHistory.getUndoOperation(undoContext);
}
}
}
private IUndoContext getUndoContext() {
if (getSourceViewer() instanceof ITextViewerExtension6) {
IUndoManager undoManager = ((ITextViewerExtension6) getSourceViewer()).getUndoManager();
if (undoManager instanceof IUndoManagerExtension)
return ((IUndoManagerExtension) undoManager).getUndoContext();
}
return null;
}
public void setScript( String script )
{
try
{
IDocumentProvider provider = getDocumentProvider( );
if ( provider != null )
{
IDocument document = provider.getDocument( getEditorInput( ) );
if ( document != null )
{
document.set( script == null ? "" : script ); //$NON-NLS-1$
return;
}
}
input = createScriptInput( script );
}
finally
{
ISourceViewer viewer = getSourceViewer( );
if ( viewer instanceof SourceViewer )
{
IUndoManager undoManager = ( (SourceViewer) viewer ).getUndoManager( );
if ( undoManager != null )
{
undoManager.reset( );
}
}
}
}
public void setScript( String script )
{
try
{
IDocumentProvider provider = getDocumentProvider( );
if ( provider != null )
{
IDocument document = provider.getDocument( getEditorInput( ) );
if ( document != null )
{
document.set( script == null ? "" : script ); //$NON-NLS-1$
return;
}
}
input = createScriptInput( script );
}
finally
{
ISourceViewer viewer = getSourceViewer( );
if ( viewer instanceof SourceViewer )
{
IUndoManager undoManager = ( (SourceViewer) viewer ).getUndoManager( );
if ( undoManager != null )
{
undoManager.reset( );
}
}
}
}
@Override
public void setUndoManager(IUndoManager undoManager) {
throw new UnsupportedOperationException();
}
@Override
public void setUndoManager(IUndoManager undoManager) {
throw new UnsupportedOperationException();
}
@Override
public void setUndoManager(IUndoManager undoManager) {
throw new UnsupportedOperationException();
}
@Override
public void setUndoManager(IUndoManager undoManager) {
throw new UnsupportedOperationException();
}
@Test
public void testUndo() {
try {
StringConcatenation _builder = new StringConcatenation();
_builder.append("class Foo {");
_builder.newLine();
_builder.append("\t");
_builder.append("val java.lang.String x");
_builder.newLine();
_builder.append("\t");
_builder.append("val java.util.ArrayList<String> y");
_builder.newLine();
_builder.append("}");
_builder.newLine();
final XtextEditor editor = this._workbenchTestHelper.openEditor("Foo", _builder.toString());
this._organizeImportsHandler.doOrganizeImports(editor.getDocument());
StringConcatenation _builder_1 = new StringConcatenation();
_builder_1.append("import java.util.ArrayList");
_builder_1.newLine();
_builder_1.newLine();
_builder_1.append("class Foo {");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("val String x");
_builder_1.newLine();
_builder_1.append("\t");
_builder_1.append("val ArrayList<String> y");
_builder_1.newLine();
_builder_1.append("}");
_builder_1.newLine();
Assert.assertEquals(_builder_1.toString(), editor.getDocument().get());
final ISourceViewer viewer = editor.getInternalSourceViewer();
Assert.assertTrue((viewer instanceof ITextViewerExtension6));
final IUndoManager undoManager = ((ITextViewerExtension6) viewer).getUndoManager();
undoManager.undo();
StringConcatenation _builder_2 = new StringConcatenation();
_builder_2.append("class Foo {");
_builder_2.newLine();
_builder_2.append("\t");
_builder_2.append("val java.lang.String x");
_builder_2.newLine();
_builder_2.append("\t");
_builder_2.append("val java.util.ArrayList<String> y");
_builder_2.newLine();
_builder_2.append("}");
_builder_2.newLine();
Assert.assertEquals(_builder_2.toString(), editor.getDocument().get());
} catch (Throwable _e) {
throw Exceptions.sneakyThrow(_e);
}
}
public void start() {
if (getActiveLinkedMode() != null) {
// for safety; should already be handled in RenameJavaElementAction
fgActiveLinkedMode.startFullDialog();
return;
}
ISourceViewer viewer = fEditor.getViewer();
IDocument document = viewer.getDocument();
ITypeScriptFile tsFile = fEditor.getTypeScriptFile();
tsFile.setDisableChanged(true);
fOriginalSelection = viewer.getSelectedRange();
int offset = fOriginalSelection.x;
try {
fLinkedPositionGroup = new LinkedPositionGroup();
if (viewer instanceof ITextViewerExtension6) {
IUndoManager undoManager = ((ITextViewerExtension6) viewer).getUndoManager();
if (undoManager instanceof IUndoManagerExtension) {
IUndoManagerExtension undoManagerExtension = (IUndoManagerExtension) undoManager;
IUndoContext undoContext = undoManagerExtension.getUndoContext();
IOperationHistory operationHistory = OperationHistoryFactory.getOperationHistory();
fStartingUndoOperation = operationHistory.getUndoOperation(undoContext);
}
}
// Find occurrences
List<OccurrencesResponseItem> occurrences = tsFile.occurrences(offset).get(1000, TimeUnit.MILLISECONDS);
// Create Eclipse linked position from the occurrences list.
int start, length;
for (int i = 0; i < occurrences.size(); i++) {
OccurrencesResponseItem item = occurrences.get(i);
start = tsFile.getPosition(item.getStart());
length = tsFile.getPosition(item.getEnd()) - start;
LinkedPosition linkedPosition = new LinkedPosition(document, start, length, i);
if (i == 0) {
fOriginalName = document.get(start, length);
fNamePosition = linkedPosition;
}
fLinkedPositionGroup.addPosition(linkedPosition);
}
fLinkedModeModel = new LinkedModeModel();
fLinkedModeModel.addGroup(fLinkedPositionGroup);
fLinkedModeModel.forceInstall();
fLinkedModeModel.addLinkingListener(new EditorHighlightingSynchronizer(fEditor));
fLinkedModeModel.addLinkingListener(new EditorSynchronizer());
LinkedModeUI ui = new EditorLinkedModeUI(fLinkedModeModel, viewer);
ui.setExitPosition(viewer, offset, 0, Integer.MAX_VALUE);
ui.setExitPolicy(new ExitPolicy(document));
ui.enter();
viewer.setSelectedRange(fOriginalSelection.x, fOriginalSelection.y); // by
// default,
// full
// word
// is
// selected;
// restore
// original
// selection
if (viewer instanceof IEditingSupportRegistry) {
IEditingSupportRegistry registry = (IEditingSupportRegistry) viewer;
registry.register(fFocusEditingSupport);
}
openSecondaryPopup();
// startAnimation();
fgActiveLinkedMode = this;
} catch (Exception e) {
JSDTTypeScriptUIPlugin.log(e);
}
}
public void setUndoManager(IUndoManager undoManager) {
originalTextViewer.setUndoManager(undoManager);
}
public void start() {
if (getActiveLinkedMode() != null) {
// for safety; should already be handled in RenameJavaElementAction
fgActiveLinkedMode.startFullDialog();
return;
}
ISourceViewer viewer= fEditor.getViewer();
IDocument document= viewer.getDocument();
fOriginalSelection= viewer.getSelectedRange();
int offset= fOriginalSelection.x;
try {
CompilationUnit root= SharedASTProvider.getAST(getCompilationUnit(), SharedASTProvider.WAIT_YES, null);
fLinkedPositionGroup= new LinkedPositionGroup();
ASTNode selectedNode= NodeFinder.perform(root, fOriginalSelection.x, fOriginalSelection.y);
if (! (selectedNode instanceof SimpleName)) {
return; // TODO: show dialog
}
SimpleName nameNode= (SimpleName) selectedNode;
if (viewer instanceof ITextViewerExtension6) {
IUndoManager undoManager= ((ITextViewerExtension6)viewer).getUndoManager();
if (undoManager instanceof IUndoManagerExtension) {
IUndoManagerExtension undoManagerExtension= (IUndoManagerExtension)undoManager;
IUndoContext undoContext= undoManagerExtension.getUndoContext();
IOperationHistory operationHistory= OperationHistoryFactory.getOperationHistory();
fStartingUndoOperation= operationHistory.getUndoOperation(undoContext);
}
}
fOriginalName= nameNode.getIdentifier();
final int pos= nameNode.getStartPosition();
ASTNode[] sameNodes= LinkedNodeFinder.findByNode(root, nameNode);
//TODO: copied from LinkedNamesAssistProposal#apply(..):
// sort for iteration order, starting with the node @ offset
Arrays.sort(sameNodes, new Comparator<ASTNode>() {
public int compare(ASTNode o1, ASTNode o2) {
return rank(o1) - rank(o2);
}
/**
* Returns the absolute rank of an <code>ASTNode</code>. Nodes
* preceding <code>pos</code> are ranked last.
*
* @param node the node to compute the rank for
* @return the rank of the node with respect to the invocation offset
*/
private int rank(ASTNode node) {
int relativeRank= node.getStartPosition() + node.getLength() - pos;
if (relativeRank < 0)
return Integer.MAX_VALUE + relativeRank;
else
return relativeRank;
}
});
for (int i= 0; i < sameNodes.length; i++) {
ASTNode elem= sameNodes[i];
LinkedPosition linkedPosition= new LinkedPosition(document, elem.getStartPosition(), elem.getLength(), i);
if (i == 0)
fNamePosition= linkedPosition;
fLinkedPositionGroup.addPosition(linkedPosition);
}
fLinkedModeModel= new LinkedModeModel();
fLinkedModeModel.addGroup(fLinkedPositionGroup);
fLinkedModeModel.forceInstall();
fLinkedModeModel.addLinkingListener(new EditorHighlightingSynchronizer(fEditor));
fLinkedModeModel.addLinkingListener(new EditorSynchronizer());
LinkedModeUI ui= new EditorLinkedModeUI(fLinkedModeModel, viewer);
ui.setExitPosition(viewer, offset, 0, Integer.MAX_VALUE);
ui.setExitPolicy(new ExitPolicy(document));
ui.enter();
viewer.setSelectedRange(fOriginalSelection.x, fOriginalSelection.y); // by default, full word is selected; restore original selection
if (viewer instanceof IEditingSupportRegistry) {
IEditingSupportRegistry registry= (IEditingSupportRegistry) viewer;
registry.register(fFocusEditingSupport);
}
openSecondaryPopup();
// startAnimation();
fgActiveLinkedMode= this;
} catch (BadLocationException e) {
JavaPlugin.log(e);
}
}
@Override
public void setUndoManager(IUndoManager undoManager) {
viewer.setUndoManager(undoManager);
}
public IUndoManager getUndoManager() {
return viewer.getUndoManager();
}