Copyright (c) 2000, 2007 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, 2007 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.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.core.runtime.Assert;
Copies a tree of text edits. A text edit copier keeps a map
between original and new text edits. It can be used to map
a copy back to its original edit.
Since: 3.0
/**
* Copies a tree of text edits. A text edit copier keeps a map
* between original and new text edits. It can be used to map
* a copy back to its original edit.
*
* @since 3.0
*/
public final class TextEditCopier {
private TextEdit fEdit;
private Map<TextEdit, TextEdit> fCopies;
Constructs a new TextEditCopier
for the
given edit. The actual copy is done by calling
perform
.
Params: - edit – the edit to copy
See Also:
/**
* Constructs a new <code>TextEditCopier</code> for the
* given edit. The actual copy is done by calling <code>
* perform</code>.
*
* @param edit the edit to copy
*
* @see #perform()
*/
public TextEditCopier(TextEdit edit) {
super();
Assert.isNotNull(edit);
fEdit= edit;
fCopies= new HashMap<>();
}
Performs the actual copying.
Returns: the copy
/**
* Performs the actual copying.
*
* @return the copy
*/
public TextEdit perform() {
TextEdit result= doCopy(fEdit);
if (result != null) {
for (TextEdit edit : fCopies.keySet()) {
edit.postProcessCopy(this);
}
}
return result;
}
Returns the copy for the original text edit.
Params: - original – the original for which the copy
is requested
Returns: the copy of the original edit or null
if the original isn't managed by this copier
/**
* Returns the copy for the original text edit.
*
* @param original the original for which the copy
* is requested
* @return the copy of the original edit or <code>null</code>
* if the original isn't managed by this copier
*/
public TextEdit getCopy(TextEdit original) {
Assert.isNotNull(original);
return fCopies.get(original);
}
//---- helper methods --------------------------------------------
private TextEdit doCopy(TextEdit edit) {
TextEdit result= edit.doCopy();
List<TextEdit> children= edit.internalGetChildren();
if (children != null) {
List<TextEdit> newChildren= new ArrayList<>(children.size());
for (TextEdit textEdit : children) {
TextEdit childCopy= doCopy(textEdit);
childCopy.internalSetParent(result);
newChildren.add(childCopy);
}
result.internalSetChildren(newChildren);
}
addCopy(edit, result);
return result;
}
private void addCopy(TextEdit original, TextEdit copy) {
fCopies.put(original, copy);
}
}