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 {}