CopyVisitor is a INodeVisitorWithResult
Signed-off-by: Florian Thienel <florian@thienel.org>
diff --git a/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/dom/CopyVisitorTest.java b/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/dom/CopyVisitorTest.java
index 85f0bfd..7237f9d 100644
--- a/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/dom/CopyVisitorTest.java
+++ b/org.eclipse.vex.core.tests/src/org/eclipse/vex/core/internal/dom/CopyVisitorTest.java
@@ -50,9 +50,7 @@
element.declareNamespace("ns1", "additionalNamespaceUri1");
element.declareNamespace("ns2", "additionalNamespaceUri2");
- final CopyVisitor copyVisitor = new CopyVisitor();
- element.accept(copyVisitor);
- final Element copy = copyVisitor.getCopy();
+ final Element copy = (Element) element.accept(new CopyVisitor());
assertEquals(new QualifiedName(null, "element"), copy.getQualifiedName());
assertEquals(2, copy.getAttributes().size());
@@ -69,8 +67,7 @@
final Text text = new Text(null, new GapContent(1), new Range(0, 0));
final CopyVisitor copyVisitor = new CopyVisitor();
- text.accept(copyVisitor);
- assertNull(copyVisitor.getCopy());
+ assertNull(text.accept(copyVisitor));
}
}
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/CopyVisitor.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/CopyVisitor.java
index 3ab90bf..1d56b35 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/CopyVisitor.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/CopyVisitor.java
@@ -16,19 +16,17 @@
*
* @author Florian Thienel
*/
-public class CopyVisitor implements INodeVisitor {
+public class CopyVisitor implements INodeVisitorWithResult<Node> {
- private Node copy;
-
- public void visit(final Document document) {
+ public Document visit(final Document document) {
throw new UnsupportedOperationException("Document cannot be copied");
}
- public void visit(final DocumentFragment fragment) {
+ public DocumentFragment visit(final DocumentFragment fragment) {
throw new UnsupportedOperationException("DocumentFragment cannot be copied");
}
- public void visit(final Element element) {
+ public Element visit(final Element element) {
final Element copyElement = new Element(element.getQualifiedName());
for (final Attribute attribute : element.getAttributes()) {
@@ -41,24 +39,16 @@
copyElement.declareNamespace(prefix, element.getNamespaceURI(prefix));
}
- copy = copyElement;
+ return copyElement;
}
- public void visit(final Text text) {
+ public Text visit(final Text text) {
// ignore Text nodes because they are created dynamically in Element.getChildNodes()
- copy = null;
+ return null;
}
- public void visit(final Comment comment) {
- copy = new Comment();
- }
-
- /**
- * @return the copy of the visited node
- */
- @SuppressWarnings("unchecked")
- public <T extends Node> T getCopy() {
- return (T) copy;
+ public Comment visit(final Comment comment) {
+ return new Comment();
}
}
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/DeepCopyVisitor.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/DeepCopyVisitor.java
index 2d6fe73..c11d7c7 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/DeepCopyVisitor.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/DeepCopyVisitor.java
@@ -60,9 +60,9 @@
associate(comment, copy);
}
+ @SuppressWarnings("unchecked")
private <T extends Node> T copy(final T node) {
- node.accept(copyVisitor);
- return copyVisitor.<T> getCopy();
+ return (T) node.accept(copyVisitor);
}
private void addToParent(final Node node) {
diff --git a/org.eclipse.vex.ui/src/org/eclipse/vex/ui/internal/handlers/AbstractAddColumnHandler.java b/org.eclipse.vex.ui/src/org/eclipse/vex/ui/internal/handlers/AbstractAddColumnHandler.java
index de6d6ea..78bc626 100644
--- a/org.eclipse.vex.ui/src/org/eclipse/vex/ui/internal/handlers/AbstractAddColumnHandler.java
+++ b/org.eclipse.vex.ui/src/org/eclipse/vex/ui/internal/handlers/AbstractAddColumnHandler.java
@@ -68,8 +68,7 @@
finalOffset = element.getStartOffset() + 1;
}
widget.moveTo(addBefore() ? element.getStartOffset() : element.getEndOffset() + 1);
- element.accept(copyVisitor);
- widget.insertElement(copyVisitor.<Element> getCopy());
+ widget.insertElement((Element) element.accept(copyVisitor));
}
if (finalOffset != -1) {
diff --git a/org.eclipse.vex.ui/src/org/eclipse/vex/ui/internal/handlers/AbstractAddRowHandler.java b/org.eclipse.vex.ui/src/org/eclipse/vex/ui/internal/handlers/AbstractAddRowHandler.java
index 8cd2ed1..b37dd2b 100644
--- a/org.eclipse.vex.ui/src/org/eclipse/vex/ui/internal/handlers/AbstractAddRowHandler.java
+++ b/org.eclipse.vex.ui/src/org/eclipse/vex/ui/internal/handlers/AbstractAddRowHandler.java
@@ -93,15 +93,13 @@
final CopyVisitor copyVisitor = new CopyVisitor();
for (final RowCells rowCells : rowCellsToInsert) {
if (rowCells.row instanceof Element) {
- ((Element) rowCells.row).accept(copyVisitor);
- widget.insertElement(copyVisitor.<Element> getCopy());
+ widget.insertElement((Element) ((Element) rowCells.row).accept(copyVisitor));
}
//cells that are to be inserted.
for (final Object cell : rowCells.cells) {
if (cell instanceof Element) {
- ((Element) cell).accept(copyVisitor);
- widget.insertElement(copyVisitor.<Element> getCopy());
+ widget.insertElement((Element) ((Element) cell).accept(copyVisitor));
widget.moveBy(+1);
} else {
widget.insertText(" ");
diff --git a/org.eclipse.vex.ui/src/org/eclipse/vex/ui/internal/handlers/SplitBlockElementHandler.java b/org.eclipse.vex.ui/src/org/eclipse/vex/ui/internal/handlers/SplitBlockElementHandler.java
index 5e9f435..07e5cb0 100644
--- a/org.eclipse.vex.ui/src/org/eclipse/vex/ui/internal/handlers/SplitBlockElementHandler.java
+++ b/org.eclipse.vex.ui/src/org/eclipse/vex/ui/internal/handlers/SplitBlockElementHandler.java
@@ -101,8 +101,7 @@
for (int i = children.size() - 1; i >= 0; i--) {
child = children.get(i);
final DocumentFragment frag = frags.get(i);
- child.accept(copyVisitor);
- vexWidget.insertElement(copyVisitor.<Element> getCopy());
+ vexWidget.insertElement((Element) child.accept(copyVisitor));
final int offset = vexWidget.getCaretOffset();
if (frag != null) {
vexWidget.insertFragment(frag);
diff --git a/org.eclipse.vex.ui/src/org/eclipse/vex/ui/internal/handlers/VexHandlerUtil.java b/org.eclipse.vex.ui/src/org/eclipse/vex/ui/internal/handlers/VexHandlerUtil.java
index 4dd53e4..fb24915 100644
--- a/org.eclipse.vex.ui/src/org/eclipse/vex/ui/internal/handlers/VexHandlerUtil.java
+++ b/org.eclipse.vex.ui/src/org/eclipse/vex/ui/internal/handlers/VexHandlerUtil.java
@@ -117,8 +117,7 @@
firstCellIsAnonymous = true;
}
} else {
- cells[i].getNode().accept(copyVisitor);
- vexWidget.insertElement(copyVisitor.<Element> getCopy());
+ vexWidget.insertElement((Element) cells[i].getNode().accept(copyVisitor));
vexWidget.moveBy(+1);
}
}
@@ -151,8 +150,7 @@
if (!tr.isAnonymous()) {
vexWidget.moveBy(+1); // Move past sentinel in current row
final CopyVisitor copyVisitor = new CopyVisitor();
- tr.getNode().accept(copyVisitor);
- vexWidget.insertElement(copyVisitor.<Element> getCopy());
+ vexWidget.insertElement((Element) tr.getNode().accept(copyVisitor));
}
cloneTableCells(vexWidget, tr, true);