Browse Source

Adapt DTD to recent changes (types can be specified in targets and the

TaskContainer concept).


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@269390 13f79535-47bb-0310-9956-ffa450edef68
master
Stefan Bodewig 24 years ago
parent
commit
6c36c507ed
2 changed files with 67 additions and 33 deletions
  1. +8
    -0
      src/main/org/apache/tools/ant/IntrospectionHelper.java
  2. +59
    -33
      src/main/org/apache/tools/ant/taskdefs/AntStructure.java

+ 8
- 0
src/main/org/apache/tools/ant/IntrospectionHelper.java View File

@@ -132,6 +132,14 @@ public class IntrospectionHelper implements BuildListener {
continue; 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) if ("addText".equals(name)
&& java.lang.Void.TYPE.equals(returnType) && java.lang.Void.TYPE.equals(returnType)
&& args.length == 1 && args.length == 1


+ 59
- 33
src/main/org/apache/tools/ant/taskdefs/AntStructure.java View File

@@ -58,6 +58,7 @@ import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.IntrospectionHelper; import org.apache.tools.ant.IntrospectionHelper;
import org.apache.tools.ant.Project; import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task; import org.apache.tools.ant.Task;
import org.apache.tools.ant.TaskContainer;
import org.apache.tools.ant.types.EnumeratedAttribute; import org.apache.tools.ant.types.EnumeratedAttribute;


import java.util.Enumeration; import java.util.Enumeration;
@@ -69,12 +70,18 @@ import java.io.*;
* Creates a partial DTD for Ant from the currently known tasks. * Creates a partial DTD for Ant from the currently known tasks.
* *
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a> * @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
*
* @version $Revision$
*/ */


public class AntStructure extends Task { public class AntStructure extends Task {


private final String lSep = System.getProperty("line.separator"); 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 Hashtable visited = new Hashtable();


private File output; private File output;
@@ -95,10 +102,10 @@ public class AntStructure extends Task {
PrintWriter out = null; PrintWriter out = null;
try { try {
try { try {
out = new PrintWriter(new OutputStreamWriter(new FileOutputStream(output), "ISO8859_1"));
out = new PrintWriter(new OutputStreamWriter(new FileOutputStream(output), "UTF8"));
} catch (UnsupportedEncodingException ue) { } 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 * http://java.sun.com/products/jdk/1.2/docs/guide/internat/encoding.doc.html
* *
* fallback to platform specific anyway. * fallback to platform specific anyway.
@@ -106,26 +113,21 @@ public class AntStructure extends Task {
out = new PrintWriter(new FileWriter(output)); 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()) { while (dataTypes.hasMoreElements()) {
String typeName = (String) dataTypes.nextElement(); String typeName = (String) dataTypes.nextElement();
printElementDecl(out, typeName, printElementDecl(out, typeName,
(Class) project.getDataTypeDefinitions().get(typeName)); (Class) project.getDataTypeDefinitions().get(typeName));
} }
for (int i=0; i<tasks.size(); i++) {
String taskName = (String) tasks.elementAt(i);
Enumeration tasks = project.getTaskDefinitions().keys();
while (tasks.hasMoreElements()) {
String taskName = (String) tasks.nextElement();
printElementDecl(out, taskName, printElementDecl(out, taskName,
(Class) project.getTaskDefinitions().get(taskName)); (Class) project.getTaskDefinitions().get(taskName));
} }
@@ -142,17 +144,39 @@ public class AntStructure extends Task {
} }
} }


private void printHead(PrintWriter out, Enumeration enum) {
out.println("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>");
private void printHead(PrintWriter out, Enumeration tasks,
Enumeration types) {
out.println("<?xml version=\"1.0\" ?>");
out.println("<!ENTITY % boolean \"(true|false|on|off|yes|no)\">"); out.println("<!ENTITY % boolean \"(true|false|on|off|yes|no)\">");
out.println("");
out.print("<!ELEMENT project (target | property | taskdef");
while (enum.hasMoreElements()) {
String typeName = (String) enum.nextElement();
out.print(" | "+typeName);
out.print("<!ENTITY % tasks \"");
boolean first = true;
while (tasks.hasMoreElements()) {
String taskName = (String) tasks.nextElement();
if (!first) {
out.print(" | ");
} else {
first = false;
}
out.print(taskName);
} }
out.println("\">");
out.print("<!ENTITY % types \"");
first = true;
while (types.hasMoreElements()) {
String typeName = (String) types.nextElement();
if (!first) {
out.print(" | ");
} else {
first = false;
}
out.print(typeName);
}
out.println("\">");


out.println("");
out.print("<!ELEMENT project (target | property | taskdef | ");
out.print(TYPES);
out.println(")*>"); out.println(")*>");
out.println("<!ATTLIST project"); out.println("<!ATTLIST project");
out.println(" name CDATA #REQUIRED"); out.println(" name CDATA #REQUIRED");
@@ -161,16 +185,11 @@ public class AntStructure extends Task {
out.println(""); out.println("");
} }


private void printTargetDecl(PrintWriter out, Vector tasks) {
private void printTargetDecl(PrintWriter out) {
out.print("<!ELEMENT target ("); out.print("<!ELEMENT target (");
for (int i=0; i<tasks.size(); i++) {
String taskName = (String) tasks.elementAt(i);
if (i > 0) {
out.print(" | ");
}
out.print(taskName);
}
out.print(TASKS);
out.print(" | ");
out.print(TYPES);
out.println(")*>"); out.println(")*>");
out.println(""); out.println("");


@@ -222,6 +241,10 @@ public class AntStructure extends Task {
v.addElement("#PCDATA"); v.addElement("#PCDATA");
} }


if (TaskContainer.class.isAssignableFrom(element)) {
v.addElement(TASKS);
}

Enumeration enum = ih.getNestedElements(); Enumeration enum = ih.getNestedElements();
while (enum.hasMoreElements()) { while (enum.hasMoreElements()) {
v.addElement((String) enum.nextElement()); v.addElement((String) enum.nextElement());
@@ -258,7 +281,7 @@ public class AntStructure extends Task {
Class type = ih.getAttributeType(attrName); Class type = ih.getAttributeType(attrName);
if (type.equals(java.lang.Boolean.class) || if (type.equals(java.lang.Boolean.class) ||
type.equals(java.lang.Boolean.TYPE)) { type.equals(java.lang.Boolean.TYPE)) {
sb.append("%boolean; ");
sb.append(BOOLEAN).append(" ");
} else if (org.apache.tools.ant.types.Reference.class.isAssignableFrom(type)) { } else if (org.apache.tools.ant.types.Reference.class.isAssignableFrom(type)) {
sb.append("IDREF "); sb.append("IDREF ");
} else if (org.apache.tools.ant.types.EnumeratedAttribute.class.isAssignableFrom(type)) { } 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<v.size(); i++) { for (int i=0; i<v.size(); i++) {
String nestedName = (String) v.elementAt(i); String nestedName = (String) v.elementAt(i);
if (!"#PCDATA".equals(nestedName)) {
if (!"#PCDATA".equals(nestedName) &&
!TASKS.equals(nestedName) &&
!TYPES.equals(nestedName)
) {
printElementDecl(out, nestedName, ih.getElementType(nestedName)); printElementDecl(out, nestedName, ih.getElementType(nestedName));
} }
} }


Loading…
Cancel
Save