Browse Source

add textname attribute to macrodef

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@275948 13f79535-47bb-0310-9956-ffa450edef68
master
Peter Reilly 21 years ago
parent
commit
7b5e67f539
5 changed files with 112 additions and 3 deletions
  1. +27
    -0
      docs/manual/CoreTasks/macrodef.html
  2. +20
    -0
      src/etc/testcases/taskdefs/macrodef.xml
  3. +41
    -3
      src/main/org/apache/tools/ant/taskdefs/MacroDef.java
  4. +13
    -0
      src/main/org/apache/tools/ant/taskdefs/MacroInstance.java
  5. +11
    -0
      src/testcases/org/apache/tools/ant/taskdefs/MacroDefTest.java

+ 27
- 0
docs/manual/CoreTasks/macrodef.html View File

@@ -43,6 +43,16 @@
</td>
<td valign="top" align="center">No</td>
</tr>
<tr>
<td valign="top">textname</td>
<td valign="top">
The textname attribute value becomes a macrodef
attribute that
gets set to the value of the text contents of the macro.
<em>since ant 1.6.1</em>
</td>
<td valign="top" align="center">No</td>
</tr>
</table>
<h3>Parameters specified as nested elements</h3>
<h4>attribute</h4>
@@ -88,6 +98,7 @@
<td valign="top">description</td>
<td valign="top">
This contains a description of the attribute.
<em>since ant 1.6.1</em>
</td>
<td valign="top" align="center">No</td>
</tr>
@@ -127,6 +138,7 @@
<td valign="top">
This contains a description
informing the user what the contents of the element are expected to be.
<em>since ant 1.6.1</em>
</td>
<td valign="top" align="center">No</td>
</tr>
@@ -196,6 +208,21 @@
&lt;linker refid="linker-libs"/&gt;
&lt;/cc-elements&gt;
&lt;/call-cc&gt;
</pre>
</blockquote>
<p>
The following shows the use of the <code>textname</code> attribute.
</p>
<blockquote>
<pre class="code">
&lt;macrodef name="echotest" textname="text"&gt;
&lt;sequential&gt;
&lt;echo&gt;@{text}&lt;/echo&gt;
&lt;/sequential&gt;
&lt;/macrodef&gt;
&lt;echotest&gt;
Hello world
&lt;/echotest&gt;
</pre>
</blockquote>
<hr>


+ 20
- 0
src/etc/testcases/taskdefs/macrodef.xml View File

@@ -101,4 +101,24 @@
</MYELEMENT>
</ignore>
</target>

<target name="textname">
<macrodef name="echotest" textname="text">
<sequential>
<echo>@{text}</echo>
</sequential>
</macrodef>
<echotest>
Hello world
</echotest>
</target>

<target name="duplicatetextname">
<macrodef name="echotest" textname="text">
<attribute name="text"/>
<sequential>
<echo>@{text}</echo>
</sequential>
</macrodef>
</target>
</project>

+ 41
- 3
src/main/org/apache/tools/ant/taskdefs/MacroDef.java View File

@@ -81,6 +81,7 @@ public class MacroDef extends AntlibDefinition {
private String name;
private List attributes = new ArrayList();
private Map elements = new HashMap();
private String textName = null;

/**
* Name of the definition
@@ -90,6 +91,25 @@ public class MacroDef extends AntlibDefinition {
this.name = name;
}

/**
* Name of the text attribute.
* @param textName the name of the attribute to use for the
* text content of the macro.
* @since ant 1.6.1
*/
public void setTextName(String textName) {
this.textName = textName;
}

/**
* @return the name of the text content attribute
* @since ant 1.6.1
*/

public String getTextName() {
return textName;
}

/**
* This is the sequential nested element of the macrodef.
*
@@ -222,6 +242,11 @@ public class MacroDef extends AntlibDefinition {
throw new BuildException(
"the attribute nested element needed a \"name\" attribute");
}
if (attribute.getName().equals(textName)) {
throw new BuildException(
"the attribute name \"" + attribute.getName()
+ "\" has already been used by the textname attribute");
}
for (int i = 0; i < attributes.size(); ++i) {
if (((Attribute) attributes.get(i)).getName().equals(
attribute.getName())) {
@@ -324,14 +349,16 @@ public class MacroDef extends AntlibDefinition {

/**
* @param desc Description of the element.
* @since ant 1.6.1
*/
public void setDescription(String desc) {
description = desc;
}

/**
* @return the description of the element, or <code>null</code> if
* @return the description of the element, or <code>null</code> if
* no description is available.
* @since ant 1.6.1
*/
public String getDescription() {
return description;
@@ -383,7 +410,7 @@ public class MacroDef extends AntlibDefinition {
public static class TemplateElement {
private String name;
private boolean optional = false;
private String description;
private String description;

/**
* The name of the element.
@@ -424,14 +451,16 @@ public class MacroDef extends AntlibDefinition {

/**
* @param desc Description of the element.
* @since ant 1.6.1
*/
public void setDescription(String desc) {
description = desc;
}

/**
* @return the description of the element, or <code>null</code> if
* @return the description of the element, or <code>null</code> if
* no description is available.
* @since ant 1.6.1
*/
public String getDescription() {
return description;
@@ -490,6 +519,15 @@ public class MacroDef extends AntlibDefinition {
if (!name.equals(other.name)) {
return false;
}
if (textName == null) {
if (other.textName != null) {
return false;
}
} else {
if (!textName.equals(other.textName)) {
return false;
}
}
if (getURI() == null || getURI().equals("")
|| getURI().equals(ProjectHelper.ANT_CORE_URI)) {
if (!(other.getURI() == null || other.getURI().equals("")


+ 13
- 0
src/main/org/apache/tools/ant/taskdefs/MacroInstance.java View File

@@ -88,6 +88,7 @@ public class MacroInstance extends Task implements DynamicConfigurator {
private Map nsElements = null;
private Map presentElements = new HashMap();
private Hashtable localProperties = new Hashtable();
private String text = "";

/**
* Called from MacroDef.MyAntTypeDefinition#create()
@@ -246,6 +247,14 @@ public class MacroInstance extends Task implements DynamicConfigurator {
return ret.toString();
}

/**
* Set the text contents for the macro.
* @param text the text to be added to the macro.
*/
public void addText(String text) {
this.text = text;
}

private UnknownElement copy(UnknownElement ue) {
UnknownElement ret = new UnknownElement(ue.getTag());
ret.setNamespace(ue.getNamespace());
@@ -331,6 +340,10 @@ public class MacroInstance extends Task implements DynamicConfigurator {
if (copyKeys.contains("id")) {
copyKeys.remove("id");
}
if (macroDef.getTextName() != null) {
localProperties.put(macroDef.getTextName(), text);
}

if (copyKeys.size() != 0) {
throw new BuildException(
"Unknown attribute" + (copyKeys.size() > 1 ? "s " : " ")


+ 11
- 0
src/testcases/org/apache/tools/ant/taskdefs/MacroDefTest.java View File

@@ -115,5 +115,16 @@ public class MacroDefTest extends BuildFileTest {
"ignore-element-case",
"nested elementnested element");
}

public void testTextName() {
expectLogContaining(
"textname", "Hello world");
}

public void testDuplicateTextName() {
expectBuildException(
"duplicatetextname",
"the attribute text has already been specified");
}
}


Loading…
Cancel
Save