diff --git a/src/etc/testcases/types/addtype.xml b/src/etc/testcases/types/addtype.xml
index accc59d71..9f9eff811 100644
--- a/src/etc/testcases/types/addtype.xml
+++ b/src/etc/testcases/types/addtype.xml
@@ -70,7 +70,7 @@
-
+
@@ -83,7 +83,7 @@
-
+
@@ -102,18 +102,21 @@
after
+
before
after
+
+
- >
+
@@ -124,4 +127,11 @@
+
+
+
+
+
+
diff --git a/src/main/org/apache/tools/ant/UnknownElement.java b/src/main/org/apache/tools/ant/UnknownElement.java
index 919793a4b..ec4a06929 100644
--- a/src/main/org/apache/tools/ant/UnknownElement.java
+++ b/src/main/org/apache/tools/ant/UnknownElement.java
@@ -57,6 +57,7 @@ package org.apache.tools.ant;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
+import java.util.Map;
import java.util.Locale;
import java.io.IOException;
@@ -106,6 +107,31 @@ public class UnknownElement extends Task {
this.elementName = elementName;
}
+ /**
+ * Makes a new unknown element based on this unknownelement
+ * does not copy the children
+ */
+ public UnknownElement copyItem() {
+ UnknownElement ret = new UnknownElement(getTag());
+ ret.setNamespace(getNamespace());
+ ret.setProject(getProject());
+ ret.setQName(getQName());
+ ret.setTaskName(getTaskName());
+ ret.setLocation(getLocation());
+ ret.setOwningTarget(getOwningTarget());
+ RuntimeConfigurable rc = new RuntimeConfigurable(
+ ret, getTaskName());
+ rc.setPolyType(getWrapper().getPolyType());
+ Map map = getWrapper().getAttributeMap();
+ for (Iterator i = map.entrySet().iterator(); i.hasNext();) {
+ Map.Entry entry = (Map.Entry) i.next();
+ rc.setAttribute(
+ (String) entry.getKey(),(String) entry.getValue());
+ }
+ rc.addText(getWrapper().getText().toString());
+ return ret;
+ }
+
/**
* Returns the name of the XML element which generated this unknown
* element.
@@ -518,7 +544,10 @@ public class UnknownElement extends Task {
// backwards compatibility - element names of nested
// elements have been all lower-case in Ant, except for
// TaskContainers
- String childName = child.getTag().toLowerCase(Locale.US);
+ // This does not work too good for typedefed elements...
+ String childName =
+ ProjectHelper.genComponentName(
+ child.getNamespace(), child.getTag().toLowerCase(Locale.US));
if (ih.supportsNestedElement(childName)) {
IntrospectionHelper.Creator creator =
ih.getElementCreator(getProject(), parent, childName);
diff --git a/src/testcases/org/apache/tools/ant/types/AddTypeTest.java b/src/testcases/org/apache/tools/ant/types/AddTypeTest.java
index a77a69086..833e1ebca 100644
--- a/src/testcases/org/apache/tools/ant/types/AddTypeTest.java
+++ b/src/testcases/org/apache/tools/ant/types/AddTypeTest.java
@@ -123,6 +123,11 @@ public class AddTypeTest extends BuildFileTest {
expectLogContaining(
"myaddconfigured", "value is Value Setexecute: value is Value Set");
}
+
+ public void testNamespace() {
+ executeTarget("namespacetest");
+ }
+
// The following will be used as types and tasks
public static interface A {}