Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.text/src/org/eclipse/text/edits/CopySourceEdit.java')
-rw-r--r--org.eclipse.text/src/org/eclipse/text/edits/CopySourceEdit.java309
1 files changed, 0 insertions, 309 deletions
diff --git a/org.eclipse.text/src/org/eclipse/text/edits/CopySourceEdit.java b/org.eclipse.text/src/org/eclipse/text/edits/CopySourceEdit.java
deleted file mode 100644
index d66c640981a..00000000000
--- a/org.eclipse.text/src/org/eclipse/text/edits/CopySourceEdit.java
+++ /dev/null
@@ -1,309 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2003 IBM Corporation and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Common Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/cpl-v10.html
- *
- * 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.Assert;
-import org.eclipse.jface.text.BadLocationException;
-import org.eclipse.jface.text.IDocument;
-
-/**
- * A copy source edit denotes the source of a copy operation. Copy
- * source edits are only valid inside an edit tree if they have a
- * corresponding traget edit. Furthermore the corresponding
- * target edit can't be a direct or indirect child of the source
- * edit. Violating one of two requirements will result in a <code>
- * MalformedTreeException</code> when executing the edit tree.
- * <p>
- * A copy source edit can manange an optional source modifier. A
- * source modifier can provide a set of replace edits which will
- * to applied to the source before it gets inserted at the target
- * position.
- *
- * @see org.eclipse.text.edits.CopyTargetEdit
- *
- * @since 3.0
- */
-public final class CopySourceEdit extends TextEdit {
-
- private CopyTargetEdit fTarget;
- private ISourceModifier fModifier;
-
- private String fSourceContent;
- private TextEdit fSourceRoot;
-
- private static class PartialCopier extends TextEditVisitor {
- TextEdit fResult;
- List fParents= new ArrayList();
- TextEdit fCurrentParent;
-
- public static TextEdit perform(TextEdit source) {
- PartialCopier copier= new PartialCopier();
- source.accept(copier);
- return copier.fResult;
- }
- private void manageCopy(TextEdit copy) {
- if (fResult == null)
- fResult= copy;
- if (fCurrentParent != null) {
- fCurrentParent.addChild(copy);
- }
- fParents.add(fCurrentParent);
- fCurrentParent= copy;
- }
- public void postVisit(TextEdit edit) {
- fCurrentParent= (TextEdit)fParents.remove(fParents.size() - 1);
- }
- public boolean visitNode(TextEdit edit) {
- manageCopy(edit.doCopy());
- return true;
- }
- public boolean visit(CopySourceEdit edit) {
- manageCopy(new RangeMarker(edit.getOffset(), edit.getLength()));
- return true;
- }
- public boolean visit(CopyTargetEdit edit) {
- manageCopy(new InsertEdit(edit.getOffset(), edit.getSourceEdit().getContent()));
- return true;
- }
- public boolean visit(MoveSourceEdit edit) {
- manageCopy(new DeleteEdit(edit.getOffset(), edit.getLength()));
- return true;
- }
- public boolean visit(MoveTargetEdit edit) {
- manageCopy(new InsertEdit(edit.getOffset(), edit.getSourceEdit().getContent()));
- return true;
- }
- }
-
- /**
- * Constructs a new copy source edit.
- *
- * @param offset the edit's offset
- * @param length the edit's length
- */
- public CopySourceEdit(int offset, int length) {
- super(offset, length);
- }
-
- /**
- * Constructs a new copy source edit.
- *
- * @param offset the edit's offset
- * @param length the edit's length
- * @param target the edit's target
- */
- public CopySourceEdit(int offset, int length, CopyTargetEdit target) {
- this(offset, length);
- setTargetEdit(target);
- }
-
- /*
- * Copy Constructor
- */
- private CopySourceEdit(CopySourceEdit other) {
- super(other);
- if (other.fModifier != null)
- fModifier= other.fModifier.copy();
- }
-
- /**
- * Returns the associated traget edit or <code>null</code>
- * if no target edit is associated yet.
- *
- * @return the target edit or <code>null</code>
- */
- public CopyTargetEdit getTargetEdit() {
- return fTarget;
- }
-
- /**
- * Sets the target edit.
- *
- * @param edit the new target edit.
- *
- * @exception MalformedTreeException is thrown if the target edit
- * is a direct or indirect child of the source edit
- */
- public void setTargetEdit(CopyTargetEdit edit) throws MalformedTreeException {
- Assert.isNotNull(edit);
- if (fTarget != edit) {
- fTarget= edit;
- fTarget.setSourceEdit(this);
- }
- }
-
- /**
- * Returns the current source modifier or <code>null</code>
- * if no source modifier is set.
- *
- * @return the source modifier
- */
- public ISourceModifier getSourceModifier() {
- return fModifier;
- }
-
- /**
- * Sets the optional source modifier.
- *
- * @param modifier the source modifier or <code>null</code>
- * if no source modification is need.
- */
- public void setSourceModifier(ISourceModifier modifier) {
- fModifier= modifier;
- }
-
- /* non Java-doc
- * @see TextEdit#doCopy
- */
- protected TextEdit doCopy() {
- return new CopySourceEdit(this);
- }
-
- /* (non-Javadoc)
- * @see TextEdit#accept0
- */
- protected void accept0(TextEditVisitor visitor) {
- boolean visitChildren = visitor.visit(this);
- if (visitChildren) {
- acceptChildren(visitor);
- }
- }
-
- //---- API for CopyTargetEdit ------------------------------------------------
-
- /* package */ String getContent() {
- // The source content can be null if the edit wasn't executed
- // due to an exclusion list of the text edit processor. Return
- // the empty string which can be moved without any harm.
- if (fSourceContent == null)
- return ""; //$NON-NLS-1$
- return fSourceContent;
- }
-
- /* package */ void clearContent() {
- fSourceContent= null;
- }
-
- /* non Java-doc
- * @see TextEdit#postProcessCopy
- */
- protected void postProcessCopy(TextEditCopier copier) {
- if (fTarget != null) {
- CopySourceEdit source= (CopySourceEdit)copier.getCopy(this);
- CopyTargetEdit target= (CopyTargetEdit)copier.getCopy(fTarget);
- if (source != null && target != null)
- source.setTargetEdit(target);
- }
- }
-
- //---- consistency check ----------------------------------------------------
-
- /* package */ int traverseConsistencyCheck(TextEditProcessor processor, IDocument document, List sourceEdits) {
- int result= super.traverseConsistencyCheck(processor, document, sourceEdits);
- // Since source computation takes place in a recursive fashion (see
- // performSourceComputation) we only do something if we don't have a
- // computated source already.
- if (fSourceContent == null) {
- if (sourceEdits.size() <= result) {
- List list= new ArrayList();
- list.add(this);
- for (int i= sourceEdits.size(); i < result; i++)
- sourceEdits.add(null);
- sourceEdits.add(list);
- } else {
- List list= (List)sourceEdits.get(result);
- if (list == null) {
- list= new ArrayList();
- sourceEdits.add(result, list);
- }
- list.add(this);
- }
- }
- return result;
- }
-
- /* package */ void performConsistencyCheck(TextEditProcessor processor, IDocument document) throws MalformedTreeException {
- if (fTarget == null)
- throw new MalformedTreeException(getParent(), this, TextEditMessages.getString("CopySourceEdit.no_target")); //$NON-NLS-1$
- if (fTarget.getSourceEdit() != this)
- throw new MalformedTreeException(getParent(), this, TextEditMessages.getString("CopySourceEdit.different_source")); //$NON-NLS-1$
- }
-
- //---- source computation -------------------------------------------------------
-
- /* package */ void traverseSourceComputation(TextEditProcessor processor, IDocument document) {
- if (processor.considerEdit(this)) {
- performSourceComputation(processor, document);
- }
- }
-
- /* package */ void performSourceComputation(TextEditProcessor processor, IDocument document) {
- try {
- MultiTextEdit root= new MultiTextEdit(getOffset(), getLength());
- root.internalSetChildren(internalGetChildren());
- fSourceContent= document.get(getOffset(), getLength());
- fSourceRoot= PartialCopier.perform(root);
- fSourceRoot.moveTree(-getOffset());
- if (fSourceRoot.hasChildren()) {
- EditDocument subDocument= new EditDocument(fSourceContent);
- fSourceRoot.apply(subDocument, TextEdit.NONE);
- if (needsTransformation())
- applyTransformation(subDocument);
- fSourceContent= subDocument.get();
- fSourceRoot= null;
- } else {
- if (needsTransformation()) {
- EditDocument subDocument= new EditDocument(fSourceContent);
- applyTransformation(subDocument);
- fSourceContent= subDocument.get();
- }
- }
- } catch (BadLocationException cannotHappen) {
- Assert.isTrue(false);
- }
- }
-
- private boolean needsTransformation() {
- return fModifier != null;
- }
-
- private void applyTransformation(IDocument document) throws MalformedTreeException {
- TextEdit newEdit= new MultiTextEdit(0, document.getLength());
- ReplaceEdit[] replaces= fModifier.getModifications(document.get());
- for (int i= 0; i < replaces.length; i++) {
- newEdit.addChild(replaces[i]);
- }
- try {
- newEdit.apply(document, TextEdit.NONE);
- } catch (BadLocationException cannotHappen) {
- Assert.isTrue(false);
- }
- }
-
- //---- document updating ----------------------------------------------------------------
-
- /* package */ int performDocumentUpdating(IDocument document) throws BadLocationException {
- fDelta= 0;
- return fDelta;
- }
-
- //---- region updating ----------------------------------------------------------------
-
- /* non Java-doc
- * @see TextEdit#deleteChildren
- */
- /* package */ boolean deleteChildren() {
- return false;
- }
-}

Back to the top