diff --git a/src/main/org/apache/tools/ant/IntrospectionHelper.java b/src/main/org/apache/tools/ant/IntrospectionHelper.java
index 4098b164b..6078ade10 100644
--- a/src/main/org/apache/tools/ant/IntrospectionHelper.java
+++ b/src/main/org/apache/tools/ant/IntrospectionHelper.java
@@ -132,6 +132,14 @@ public class IntrospectionHelper implements BuildListener {
continue;
}
+ // hide addTask for TaskContainers
+ if (org.apache.tools.ant.TaskContainer.class.isAssignableFrom(bean)
+ && args.length == 1 && "addTask".equals(name)
+ && org.apache.tools.ant.Task.class.equals(args[0])) {
+ continue;
+ }
+
+
if ("addText".equals(name)
&& java.lang.Void.TYPE.equals(returnType)
&& args.length == 1
diff --git a/src/main/org/apache/tools/ant/taskdefs/AntStructure.java b/src/main/org/apache/tools/ant/taskdefs/AntStructure.java
index 83b84516f..61576592d 100644
--- a/src/main/org/apache/tools/ant/taskdefs/AntStructure.java
+++ b/src/main/org/apache/tools/ant/taskdefs/AntStructure.java
@@ -58,6 +58,7 @@ import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.IntrospectionHelper;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task;
+import org.apache.tools.ant.TaskContainer;
import org.apache.tools.ant.types.EnumeratedAttribute;
import java.util.Enumeration;
@@ -69,12 +70,18 @@ import java.io.*;
* Creates a partial DTD for Ant from the currently known tasks.
*
* @author Stefan Bodewig
+ *
+ * @version $Revision$
*/
public class AntStructure extends Task {
private final String lSep = System.getProperty("line.separator");
+ private final String BOOLEAN = "%boolean;";
+ private final String TASKS = "%tasks;";
+ private final String TYPES = "%types;";
+
private Hashtable visited = new Hashtable();
private File output;
@@ -95,10 +102,10 @@ public class AntStructure extends Task {
PrintWriter out = null;
try {
try {
- out = new PrintWriter(new OutputStreamWriter(new FileOutputStream(output), "ISO8859_1"));
+ out = new PrintWriter(new OutputStreamWriter(new FileOutputStream(output), "UTF8"));
} catch (UnsupportedEncodingException ue) {
/*
- * Plain impossible with ISO8859_1, see
+ * Plain impossible with UTF8, see
* http://java.sun.com/products/jdk/1.2/docs/guide/internat/encoding.doc.html
*
* fallback to platform specific anyway.
@@ -106,26 +113,21 @@ public class AntStructure extends Task {
out = new PrintWriter(new FileWriter(output));
}
- Enumeration dataTypes = project.getDataTypeDefinitions().keys();
- printHead(out, dataTypes);
+ printHead(out, project.getTaskDefinitions().keys(),
+ project.getDataTypeDefinitions().keys());
- Vector tasks = new Vector();
- Enumeration enum = project.getTaskDefinitions().keys();
- while (enum.hasMoreElements()) {
- String taskName = (String) enum.nextElement();
- tasks.addElement(taskName);
- }
- printTargetDecl(out, tasks);
+ printTargetDecl(out);
- dataTypes = project.getDataTypeDefinitions().keys();
+ Enumeration dataTypes = project.getDataTypeDefinitions().keys();
while (dataTypes.hasMoreElements()) {
String typeName = (String) dataTypes.nextElement();
printElementDecl(out, typeName,
(Class) project.getDataTypeDefinitions().get(typeName));
}
- for (int i=0; i");
+ private void printHead(PrintWriter out, Enumeration tasks,
+ Enumeration types) {
+ out.println("");
out.println("");
- out.println("");
-
- out.print("");
+ out.print("");
+ out.println("");
+
+ out.print("");
out.println(" 0) {
- out.print(" | ");
- }
- out.print(taskName);
- }
-
+ out.print(TASKS);
+ out.print(" | ");
+ out.print(TYPES);
out.println(")*>");
out.println("");
@@ -222,6 +241,10 @@ public class AntStructure extends Task {
v.addElement("#PCDATA");
}
+ if (TaskContainer.class.isAssignableFrom(element)) {
+ v.addElement(TASKS);
+ }
+
Enumeration enum = ih.getNestedElements();
while (enum.hasMoreElements()) {
v.addElement((String) enum.nextElement());
@@ -258,7 +281,7 @@ public class AntStructure extends Task {
Class type = ih.getAttributeType(attrName);
if (type.equals(java.lang.Boolean.class) ||
type.equals(java.lang.Boolean.TYPE)) {
- sb.append("%boolean; ");
+ sb.append(BOOLEAN).append(" ");
} else if (org.apache.tools.ant.types.Reference.class.isAssignableFrom(type)) {
sb.append("IDREF ");
} else if (org.apache.tools.ant.types.EnumeratedAttribute.class.isAssignableFrom(type)) {
@@ -295,7 +318,10 @@ public class AntStructure extends Task {
for (int i=0; i