diff --git a/WHATSNEW b/WHATSNEW index e9c32fefc..b57306706 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -13,6 +13,7 @@ Fixed bugs: * included empty directories. Bugzilla report 40258. * Invalid hash code of Target causes XmlLogger to fail. Bugzilla report 40207. +* Macro element did not include top level Text. Bugzilla report 36803. Other changes: -------------- diff --git a/src/etc/testcases/taskdefs/macrodef.xml b/src/etc/testcases/taskdefs/macrodef.xml index e2786a42c..ec7545141 100644 --- a/src/etc/testcases/taskdefs/macrodef.xml +++ b/src/etc/testcases/taskdefs/macrodef.xml @@ -256,4 +256,18 @@ + + + + + + + + + + + Hello World + + + diff --git a/src/main/org/apache/tools/ant/taskdefs/MacroInstance.java b/src/main/org/apache/tools/ant/taskdefs/MacroInstance.java index 0f8aeff36..1a3b5fcca 100644 --- a/src/main/org/apache/tools/ant/taskdefs/MacroInstance.java +++ b/src/main/org/apache/tools/ant/taskdefs/MacroInstance.java @@ -133,7 +133,7 @@ public class MacroInstance extends Task implements DynamicAttribute, TaskContain if (presentElements.get(name) != null) { throw new BuildException("Element " + name + " already present"); } - presentElements.put(name, ue.getChildren()); + presentElements.put(name, ue); } } @@ -297,8 +297,9 @@ public class MacroInstance extends Task implements DynamicAttribute, TaskContain ret.addChild(child); } } else { - List list = (List) presentElements.get(tag); - if (list == null) { + UnknownElement presentElement = + (UnknownElement) presentElements.get(tag); + if (presentElement == null) { if (!templateElement.isOptional()) { throw new BuildException( "Required nested element " @@ -306,11 +307,19 @@ public class MacroInstance extends Task implements DynamicAttribute, TaskContain } continue; } - for (Iterator i = list.iterator(); - i.hasNext();) { - UnknownElement child = copy((UnknownElement) i.next()); - rc.addChild(child.getWrapper()); - ret.addChild(child); + String presentText = + presentElement.getWrapper().getText().toString(); + if (!"".equals(presentText)) { + rc.addText(macroSubs(presentText, localAttributes)); + } + List list = presentElement.getChildren(); + if (list != null) { + for (Iterator i = list.iterator(); + i.hasNext();) { + UnknownElement child = copy((UnknownElement) i.next()); + rc.addChild(child.getWrapper()); + ret.addChild(child); + } } } } diff --git a/src/testcases/org/apache/tools/ant/taskdefs/MacroDefTest.java b/src/testcases/org/apache/tools/ant/taskdefs/MacroDefTest.java index aea957159..d24096c40 100644 --- a/src/testcases/org/apache/tools/ant/taskdefs/MacroDefTest.java +++ b/src/testcases/org/apache/tools/ant/taskdefs/MacroDefTest.java @@ -150,5 +150,9 @@ public class MacroDefTest extends BuildFileTest { "Checking if a back trace is created", "following error occurred"); } + + public void testTopLevelText() { + expectLogContaining("top-level-text", "Hello World"); + } }