You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by bo...@apache.org on 2001/07/26 09:51:28 UTC
cvs commit: jakarta-ant/src/main/org/apache/tools/ant/taskdefs AntStructure.java
bodewig 01/07/26 00:51:28
Modified: src/main/org/apache/tools/ant IntrospectionHelper.java
src/main/org/apache/tools/ant/taskdefs AntStructure.java
Log:
Adapt DTD to recent changes (types can be specified in targets and the
TaskContainer concept).
Revision Changes Path
1.18 +8 -0 jakarta-ant/src/main/org/apache/tools/ant/IntrospectionHelper.java
Index: IntrospectionHelper.java
===================================================================
RCS file: /home/cvs/jakarta-ant/src/main/org/apache/tools/ant/IntrospectionHelper.java,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- IntrospectionHelper.java 2001/07/11 10:08:16 1.17
+++ IntrospectionHelper.java 2001/07/26 07:51:28 1.18
@@ -132,6 +132,14 @@
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
1.13 +59 -33 jakarta-ant/src/main/org/apache/tools/ant/taskdefs/AntStructure.java
Index: AntStructure.java
===================================================================
RCS file: /home/cvs/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/AntStructure.java,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -r1.12 -r1.13
--- AntStructure.java 2001/05/23 16:57:30 1.12
+++ AntStructure.java 2001/07/26 07:51:28 1.13
@@ -58,6 +58,7 @@
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 @@
* Creates a partial DTD for Ant from the currently known tasks.
*
* @author <a href="mailto:stefan.bodewig@epost.de">Stefan Bodewig</a>
+ *
+ * @version $Revision: 1.13 $
*/
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 @@
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 @@
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<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,
(Class) project.getTaskDefinitions().get(taskName));
}
@@ -142,17 +144,39 @@
}
}
- 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("");
-
- 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("<!ATTLIST project");
out.println(" name CDATA #REQUIRED");
@@ -161,16 +185,11 @@
out.println("");
}
- private void printTargetDecl(PrintWriter out, Vector tasks) {
+ private void printTargetDecl(PrintWriter out) {
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("");
@@ -222,6 +241,10 @@
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 @@
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 @@
for (int i=0; i<v.size(); 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));
}
}