handle attribute namespaces also in FindUndeclaredNamespacesVisitor

https://bugs.eclipse.org/bugs/show_bug.cgi?id=409647
diff --git a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/FindUndeclaredNamespacesVisitor.java b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/FindUndeclaredNamespacesVisitor.java
index 04241ea..babdbe3 100644
--- a/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/FindUndeclaredNamespacesVisitor.java
+++ b/org.eclipse.vex.core/src/org/eclipse/vex/core/internal/dom/FindUndeclaredNamespacesVisitor.java
@@ -14,6 +14,7 @@
 import java.util.HashSet;

 import java.util.Set;

 

+import org.eclipse.vex.core.provisional.dom.IAttribute;

 import org.eclipse.vex.core.provisional.dom.IComment;

 import org.eclipse.vex.core.provisional.dom.IDocument;

 import org.eclipse.vex.core.provisional.dom.IDocumentFragment;

@@ -46,7 +47,15 @@
 			result.add(namespaceUri);

 		}

 

+		for (final IAttribute attribute : element.getAttributes()) {

+			final String attributeNamespaceUri = attribute.getQualifiedName().getQualifier();

+			if (!isNamespaceDeclared(element, attributeNamespaceUri)) {

+				result.add(attributeNamespaceUri);

+			}

+		}

+

 		result.addAll(visitAll(element.children()));

+

 		return result;

 	}

 

@@ -71,6 +80,10 @@
 			return true;

 		}

 

+		if (namespaceUri.equals(Namespace.XML_NAMESPACE_URI) || namespaceUri.equals(Namespace.XMLNS_NAMESPACE_URI)) {

+			return true;

+		}

+

 		if (namespaceUri.equals(element.getDefaultNamespaceURI())) {

 			return true;

 		}