Use INodeVisitor instead of 'instanceof'.
Signed-off-by: Florian Thienel <florian@thienel.org>
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/BaseNodeVisitor.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/BaseNodeVisitor.java
new file mode 100644
index 0000000..ae0d4d9
--- /dev/null
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/BaseNodeVisitor.java
@@ -0,0 +1,33 @@
+/*******************************************************************************
+ * Copyright (c) 2012 Florian Thienel and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Florian Thienel - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.vex.core.internal.dom;
+
+/**
+ * This class provides default implementations for the methods defined by the <code>INodeVisitor</code> interface.
+ *
+ * @see INodeVisitor
+ * @author Florian Thienel
+ */
+public class BaseNodeVisitor implements INodeVisitor {
+
+ public void visit(final Element element) {
+ // ignore
+ }
+
+ public void visit(final Document document) {
+ // ignore
+ }
+
+ public void visit(final Text text) {
+ // ignore
+ }
+
+}
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Document.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Document.java
index 8e8543b..915eb15 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Document.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Document.java
@@ -271,17 +271,21 @@
}
public List<QualifiedName> getNodeNames(final int startOffset, final int endOffset) {
-
final List<Node> nodes = getNodes(startOffset, endOffset);
final List<QualifiedName> names = new ArrayList<QualifiedName>(nodes.size());
- for (int i = 0; i < nodes.size(); i++) {
- final Node node = nodes.get(i);
- if (node instanceof Element) {
- names.add(((Element) node).getQualifiedName());
- } else {
- names.add(Validator.PCDATA);
- }
+ for (final Node node : nodes) {
+ node.accept(new BaseNodeVisitor() {
+ @Override
+ public void visit(final Text text) {
+ names.add(Validator.PCDATA);
+ }
+
+ @Override
+ public void visit(final Element element) {
+ names.add(element.getQualifiedName());
+ }
+ });
}
return names;
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Element.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Element.java
index 95c950c..f48ef16 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Element.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/Element.java
@@ -16,7 +16,6 @@
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@@ -177,14 +176,14 @@
public List<Element> getChildElements() {
final List<Node> nodes = getChildNodes();
- final Iterator<Node> iter = nodes.iterator();
final List<Element> elements = new ArrayList<Element>();
- while (iter.hasNext()) {
- // TODO use INodeVisitor once available
- final Node node = iter.next();
- if (node instanceof Element) {
- elements.add((Element) node);
- }
+ for (final Node node : nodes) {
+ node.accept(new BaseNodeVisitor() {
+ @Override
+ public void visit(final Element element) {
+ elements.add(element);
+ }
+ });
}
return elements;
}