Copyright (c) 2000, 2008 IBM Corporation and others. This program and the accompanying materials are made available under the terms of the Eclipse Public License 2.0 which accompanies this distribution, and is available at https://www.eclipse.org/legal/epl-2.0/ SPDX-License-Identifier: EPL-2.0 Contributors: IBM Corporation - initial API and implementation
/******************************************************************************* * Copyright (c) 2000, 2008 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 * which accompanies this distribution, and is available at * https://www.eclipse.org/legal/epl-2.0/ * * SPDX-License-Identifier: EPL-2.0 * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/
package org.eclipse.text.edits; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument;
This class encapsulates the reverse changes of an executed text edit tree. To apply an undo memento to a document use method apply(IDocument).

Clients can't add additional children to an undo edit nor can they add an undo edit as a child to another edit. Doing so results in both cases in a MalformedTreeException.

Since:3.0
@noinstantiateThis class is not intended to be instantiated by clients.
/** * This class encapsulates the reverse changes of an executed text * edit tree. To apply an undo memento to a document use method * <code>apply(IDocument)</code>. * <p> * Clients can't add additional children to an undo edit nor can they * add an undo edit as a child to another edit. Doing so results in * both cases in a <code>MalformedTreeException</code>. * </p> * * @since 3.0 * @noinstantiate This class is not intended to be instantiated by clients. */
public final class UndoEdit extends TextEdit { UndoEdit() { super(0, Integer.MAX_VALUE); } private UndoEdit(UndoEdit other) { super(other); } @Override void internalAdd(TextEdit child) throws MalformedTreeException { throw new MalformedTreeException(null, this, TextEditMessages.getString("UndoEdit.no_children")); //$NON-NLS-1$ } @Override void aboutToBeAdded(TextEdit parent) { throw new MalformedTreeException(parent, this, TextEditMessages.getString("UndoEdit.can_not_be_added")); //$NON-NLS-1$ } @Override UndoEdit dispatchPerformEdits(TextEditProcessor processor) throws BadLocationException { return processor.executeUndo(); } @Override void dispatchCheckIntegrity(TextEditProcessor processor) throws MalformedTreeException { processor.checkIntegrityUndo(); } @Override protected TextEdit doCopy() { return new UndoEdit(this); } @Override protected void accept0(TextEditVisitor visitor) { boolean visitChildren= visitor.visit(this); if (visitChildren) { acceptChildren(visitor); } } @Override int performDocumentUpdating(IDocument document) throws BadLocationException { fDelta= 0; return fDelta; } void add(ReplaceEdit edit) { List<TextEdit> children= internalGetChildren(); if (children == null) { children= new ArrayList<>(2); internalSetChildren(children); } children.add(edit); } void defineRegion(int offset, int length) { internalSetOffset(offset); internalSetLength(length); } @Override boolean deleteChildren() { return false; } }