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