Browse Source

Fix bug for typedefed add() support with namespace

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@275472 13f79535-47bb-0310-9956-ffa450edef68
master
Peter Reilly 21 years ago
parent
commit
9ab8595b28
3 changed files with 48 additions and 4 deletions
  1. +13
    -3
      src/etc/testcases/types/addtype.xml
  2. +30
    -1
      src/main/org/apache/tools/ant/UnknownElement.java
  3. +5
    -0
      src/testcases/org/apache/tools/ant/types/AddTypeTest.java

+ 13
- 3
src/etc/testcases/types/addtype.xml View File

@@ -70,7 +70,7 @@
<typedef loaderref="nested.loader" classpathref="nested.classes" <typedef loaderref="nested.loader" classpathref="nested.classes"
name = "myvalue" name = "myvalue"
classname="${nested.package}AddTypeTest$MyValue"/> classname="${nested.package}AddTypeTest$MyValue"/>
</target>
</target>


<target name="nested.a" depends="init"> <target name="nested.a" depends="init">
<nested.container> <nested.container>
@@ -83,7 +83,7 @@
<nested.b/> <nested.b/>
</nested.container> </nested.container>
</target> </target>
<target name="nested.c" depends="init"> <target name="nested.c" depends="init">
<nested.container> <nested.container>
<nested.c/> <nested.c/>
@@ -102,18 +102,21 @@
<nested.condition.type/> <nested.condition.type/>
<echo>after</echo> <echo>after</echo>
</target> </target>

<target name="condition.task" depends="init"> <target name="condition.task" depends="init">
<echo>before</echo> <echo>before</echo>
<nested.condition.task/> <nested.condition.task/>
<echo>after</echo> <echo>after</echo>
</target> </target>

<target name="condition.condition.type" depends="init"> <target name="condition.condition.type" depends="init">
<condition property="condition.condition.type"> <condition property="condition.condition.type">
<nested.condition.type/> <nested.condition.type/>
</condition> </condition>
</target> </target>

<target name="condition.condition.task" depends="init"> <target name="condition.condition.task" depends="init">
<condition property="condition.condition.task">>
<condition property="condition.condition.task">
<nested.condition.task/> <nested.condition.task/>
</condition> </condition>
</target> </target>
@@ -124,4 +127,11 @@
</myaddconfigured> </myaddconfigured>
</target> </target>


<target name="namespacetest" xmlns:prefix="uri">
<typedef name="eq" uri="uri"
classname="org.apache.tools.ant.taskdefs.condition.Equals"/>
<condition property="p">
<prefix:eq arg1="a" arg2="b"/>
</condition>
</target>
</project> </project>

+ 30
- 1
src/main/org/apache/tools/ant/UnknownElement.java View File

@@ -57,6 +57,7 @@ package org.apache.tools.ant;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Locale; import java.util.Locale;
import java.io.IOException; import java.io.IOException;


@@ -106,6 +107,31 @@ public class UnknownElement extends Task {
this.elementName = elementName; 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 * Returns the name of the XML element which generated this unknown
* element. * element.
@@ -518,7 +544,10 @@ public class UnknownElement extends Task {
// backwards compatibility - element names of nested // backwards compatibility - element names of nested
// elements have been all lower-case in Ant, except for // elements have been all lower-case in Ant, except for
// TaskContainers // 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)) { if (ih.supportsNestedElement(childName)) {
IntrospectionHelper.Creator creator = IntrospectionHelper.Creator creator =
ih.getElementCreator(getProject(), parent, childName); ih.getElementCreator(getProject(), parent, childName);


+ 5
- 0
src/testcases/org/apache/tools/ant/types/AddTypeTest.java View File

@@ -123,6 +123,11 @@ public class AddTypeTest extends BuildFileTest {
expectLogContaining( expectLogContaining(
"myaddconfigured", "value is Value Setexecute: value is Value Set"); "myaddconfigured", "value is Value Setexecute: value is Value Set");
} }

public void testNamespace() {
executeTarget("namespacetest");
}
// The following will be used as types and tasks // The following will be used as types and tasks
public static interface A {} public static interface A {}


Loading…
Cancel
Save