Browse Source

Substantial refactoring.

Added datatype defaults.properties generation as well as xdocs for them. Created wrapper task somewhat similar to Darrell DoBoer's in mymidon (although his is still slicker!).

Since its already processing all of Ant's main source code, I added in generation of todo lists of both Ant and this proposal - into two separate directories.


git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@271732 13f79535-47bb-0310-9956-ffa450edef68
master
Erik Hatcher 23 years ago
parent
commit
95dbd84d6e
10 changed files with 514 additions and 66 deletions
  1. +78
    -30
      proposal/xdocs/build.xml
  2. +98
    -0
      proposal/xdocs/src/org/apache/tools/ant/xdoclet/AntXDocletTask.java
  3. +122
    -0
      proposal/xdocs/src/org/apache/tools/ant/xdoclet/DatatypeSubTask.java
  4. +125
    -0
      proposal/xdocs/src/org/apache/tools/ant/xdoclet/DatatypeTagsHandler.java
  5. +33
    -29
      proposal/xdocs/src/org/apache/tools/ant/xdoclet/TaskSubTask.java
  6. +3
    -5
      proposal/xdocs/src/org/apache/tools/ant/xdoclet/TaskTagsHandler.java
  7. +49
    -0
      proposal/xdocs/templates/datatype_xdoc.template
  8. +1
    -1
      proposal/xdocs/templates/task_defaults_properties.template
  9. +2
    -1
      proposal/xdocs/templates/task_xdoc.template
  10. +3
    -0
      proposal/xdocs/templates/type_defaults_properties.template

+ 78
- 30
proposal/xdocs/build.xml View File

@@ -1,21 +1,27 @@
<?xml version="1.0" ?>
<project name="XDoclet" default="default">
<project name="XDoclet" default="main">

<property name="log4j.jar" location="../../lib/optional/log4j.jar"/>
<property name="xdoclet.jar" location="lib/xdoclet.jar"/>

<property name="src.dir"
location="../../src/main/org/apache/tools/ant/taskdefs"/>
location="../../src/main/org/apache/tools/ant"/>
<property name="src.root"
location="../../src/main"/>
<property name="docs.src"
location="../../xdocs"/>
<property name="build.dir" location="build"/>
<property name="gen.dir" location="${build.dir}/gen"/>

<property name="template.dir" location="templates"/>
<property name="defaults.properties.template"
location="${template.dir}/defaults_properties.template"/>
<property name="xdoc.template"
<property name="task.properties.template"
location="${template.dir}/task_defaults_properties.template"/>
<property name="type.properties.template"
location="${template.dir}/type_defaults_properties.template"/>
<property name="task_xdoc.template"
location="${template.dir}/task_xdoc.template"/>
<property name="datatype_xdoc.template"
location="${template.dir}/datatype_xdoc.template"/>


<target name="init">
@@ -31,6 +37,11 @@
<pathelement path="${java.class.path}"/>
<pathelement location="${build.dir}"/>
</path>

<taskdef name="document"
classname="xdoclet.doc.DocumentDocletTask"
classpathref="xdoclet.classpath"/>

</target>


@@ -41,46 +52,83 @@
<target name="compile" depends="init">
<javac srcdir="src" destdir="${build.dir}"
debug="true" classpathref="xdoclet.classpath"/>
<taskdef name="xdocs"
classname="org.apache.tools.ant.xdoclet.AntXDocletTask"
classpathref="xdoclet.classpath"/>
</target>

<target name="gen" depends="compile">
<delete dir="${gen.dir}"/>

<taskdef name="document"
classname="xdoclet.doc.DocumentDocletTask"
classpathref="xdoclet.classpath"/>

<document sourcepath="${src.root}"
destdir="${gen.dir}"
classpathref="xdoclet.classpath">
<xdocs sourcepath="${src.root}"
destdir="${gen.dir}"
mergedir="${basedir}/src"
classpathref="xdoclet.classpath">
<fileset dir="${src.dir}">
<include name="**/*.java" unless="class.name"/>
<include name="**/${class.name}.java" if="class.name"/>
</fileset>
<template subTaskClassName="org.apache.tools.ant.xdoclet.AntSubTask"
templateFile="${defaults.properties.template}"
destinationfile="defaults.properties"/>
<template subTaskClassName="org.apache.tools.ant.xdoclet.AntSubTask"
templateFile="${xdoc.template}"
destinationfile="{0}.xml" extent="concrete-type"/>
</document>

<!-- currently not working - bug in XDoclet?
<document sourcepath="src"
destdir="${gen.dir}"
classpathref="xdoclet.classpath">
<fileset dir="src">
<include name="**/*.java"/>
<!-- Generate XML task descriptor files -->
<tasks templateFile="${task_xdoc.template}"
destinationfile="{0}.xml"/>

<!-- Generate XML datatype descriptor files -->
<datatypes templateFile="${datatype_xdoc.template}"
destdir="${gen.dir}/datatypes"
destinationfile="{0}.xml"/>

<!-- @todo - with some additional logic in these subtasks, they
could be used similar to above instead of <template> -->
<!-- Generate task defaults.properties -->
<template subTaskClassName="org.apache.tools.ant.xdoclet.TaskSubTask"
templateFile="${task.properties.template}"
destinationfile="task_defaults.properties"/>

<!-- Generate datatype defaults.properties -->
<template subTaskClassName="org.apache.tools.ant.xdoclet.DatatypeSubTask"
templateFile="${type.properties.template}"
destinationfile="type_defaults.properties"/>

<!-- Generate to-do list -->
<info destdir="${gen.dir}/todo/ant"
header="To-do List"
projectname="Ant"/>
</xdocs>

</target>

<target name="document" depends="init">
<document sourcepath="${basedir}/src"
destdir="${gen.dir}"
mergedir="${basedir}/src"
classpathref="xdoclet.classpath">
<fileset dir="${basedir}/src">
<include name="**/*.java" unless="class.name"/>
<include name="**/${class.name}.java" if="class.name"/>
</fileset>
<documenttags/>
</document> -->

<info destdir="${gen.dir}/todo/xdocs"/>

<!-- This is currently broken, checking into...
<documenttags/> -->

</document>
</target>

<target name="docs" depends="gen">
<mkdir dir="${build.dir}/docs" />
<!-- Copy stuff so things are in the correct relative location. -->
<copy todir="${build.dir}/docs">
<fileset dir="${basedir}/../../docs" includes="artwork/**" />
</copy>
<mkdir dir="${basedir}/xdocs" />
<copy todir="${basedir}/xdocs">
<fileset dir="${docs.src}" includes="stylesheets/project.xml" />
</copy>
<!-- Generate HTML using DVSL -->
<ant dir="dvsl"/>
</target>

<target name="default" depends="gen"/>
<target name="main" depends="gen,document"/>

</project>


+ 98
- 0
proposal/xdocs/src/org/apache/tools/ant/xdoclet/AntXDocletTask.java View File

@@ -0,0 +1,98 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Ant", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.apache.tools.ant.xdoclet;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.types.FileSet;
import xdoclet.DocletTask;
import xdoclet.doc.info.InfoSubTask;
import xdoclet.doc.DocumentDocletTask;

import java.io.File;
import java.util.Vector;

public class AntXDocletTask extends DocumentDocletTask {
private Vector _subTasks = new Vector();

public void addTasks(TaskSubTask subtask) {
_subTasks.add(subtask);
}

public void addDatatypes(DatatypeSubTask subtask) {
_subTasks.add(subtask);
}

/**
* Borrowed a bit from Darrell DeBoer's myrmidon stuff (thanks Darrell!)
*/
public void execute() throws BuildException {
// Add the base directories of all the filesets to the sourcepath
final Vector filesets = getFilesets();
for (int i = 0; i < filesets.size(); i++) {
final FileSet fileSet = (FileSet) filesets.elementAt(i);
final File basedir = fileSet.getDir(project);
createSourcepath().setLocation(basedir);
}

super.execute();
}

protected Vector getSubTasks() {
Vector subtasks = super.getSubTasks();

subtasks.addAll(_subTasks);

return subtasks;
}
}

+ 122
- 0
proposal/xdocs/src/org/apache/tools/ant/xdoclet/DatatypeSubTask.java View File

@@ -0,0 +1,122 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Ant", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.apache.tools.ant.xdoclet;

import com.sun.javadoc.ClassDoc;
import xdoclet.TemplateSubTask;
import xdoclet.XDocletException;
import xdoclet.XDocletTagSupport;
import xdoclet.tags.TypeTagsHandler;
import xdoclet.util.TypeConversionUtil;

import java.io.File;
import java.text.MessageFormat;

/**
* Custom XDoclet subtask to handle Ant datatypes
*/
public class DatatypeSubTask extends TemplateSubTask {
public final static String SUBTASK_NAME = "datatypes";

public String getSubTaskName() {
return SUBTASK_NAME;
}

/**
* Returns true if the class is an Ant task. This causes the task to be processed
* by the XDoclet template task.
*/
protected boolean matchesGenerationRules(ClassDoc clazz) throws XDocletException {
return isAntDatatype(clazz);
;
}

/**
* @todo a datatype doesn't have to extend Datatype, right? so perhaps should
* another condition to flag a class with @ant.datatype name="..."
*/
public static final boolean isAntDatatype(ClassDoc clazz) throws XDocletException {
if (clazz.isAbstract()) {
return false;
}

// no inner classes
if (clazz.containingClass() != null) {
return false;
}

String ignoreValue = XDocletTagSupport.getClassTagValue(clazz, "ant:datatype", "ignore", 0, null, "false", false, false);
boolean ignore = TypeConversionUtil.stringToBoolean(ignoreValue, true);

if (ignore) {
return false;
}

return TypeTagsHandler.isOfType(clazz,
"org.apache.tools.ant.types.DataType",
TypeTagsHandler.TYPE_HIERARCHY);
}

/**
* Custom file naming. Use the task name for the file name rather than the
* default class name.
*
* @todo fix hardcoded path name
*/
protected String getGeneratedFileName(ClassDoc clazz) throws XDocletException {
String typeName = DatatypeTagsHandler.getDatatypeName(clazz);
return typeName + ".xml";
}

}

+ 125
- 0
proposal/xdocs/src/org/apache/tools/ant/xdoclet/DatatypeTagsHandler.java View File

@@ -0,0 +1,125 @@
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2002 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Ant", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
package org.apache.tools.ant.xdoclet;

import com.sun.javadoc.ClassDoc;
import com.sun.javadoc.MethodDoc;
import com.sun.javadoc.Parameter;
import com.sun.javadoc.Type;

import xdoclet.XDocletException;
import xdoclet.XDocletTagSupport;
import xdoclet.tags.AbstractProgramElementTagsHandler;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;

/**
* Custom tag handler for XDoclet templates for Ant-specific processing.
*
* @author Erik Hatcher
* @created February 17, 2002
*
* @todo clean up logic so that all setters are gathered first (even
* superclass) and sorted along wih them
* @todo need to create better logic for finding proper setters
* @todo add ifIsAntTask, among other convenience tags
*/
public class DatatypeTagsHandler extends XDocletTagSupport {

/**
* Iterates over all Ant datatypes
*/
public void forAllDatatypes(String template, Properties attributes) throws XDocletException {
ClassDoc[] classes = AbstractProgramElementTagsHandler.getAllClasses();
ClassDoc cur_class = null;

for (int i = 0; i < classes.length; i++) {
cur_class = classes[i];
setCurrentClass(cur_class);

if (DatatypeSubTask.isAntDatatype(cur_class)) {
generate(template);
}
}
}

/**
* Provides the datatype name
*/
public String typeName() throws XDocletException {
return getDatatypeName(getCurrentClass());
}

public static final String getDatatypeName(ClassDoc clazz) throws XDocletException {
// sheesh! There should be a friendlier method than this!
String tagValue = getTagValue(clazz, "ant:datatype", "name", -1,
null, null, null, null,
null, false, XDocletTagSupport.FOR_CLASS, false);

if (tagValue == null) {
tagValue = clazz.name();

tagValue = tagValue.toLowerCase();
}
return tagValue;
}
}


proposal/xdocs/src/org/apache/tools/ant/xdoclet/AntSubTask.java → proposal/xdocs/src/org/apache/tools/ant/xdoclet/TaskSubTask.java View File

@@ -55,21 +55,19 @@ package org.apache.tools.ant.xdoclet;

import com.sun.javadoc.ClassDoc;
import com.sun.javadoc.MethodDoc;
import com.sun.javadoc.PackageDoc;
import com.sun.javadoc.Tag;
import xdoclet.TemplateSubTask;
import xdoclet.XDocletException;
import xdoclet.XDocletTagSupport;
import xdoclet.tags.PackageTagsHandler;
import xdoclet.util.TypeConversionUtil;

import java.io.File;
import java.text.MessageFormat;

/**
* Custom XDoclet subtask to handle Ant specific needs
*/
public class AntSubTask extends TemplateSubTask {
public final static String SUBTASK_NAME = "ant";
public class TaskSubTask extends TemplateSubTask {
public final static String SUBTASK_NAME = "tasks";

public String getSubTaskName() {
return SUBTASK_NAME;
@@ -78,21 +76,18 @@ public class AntSubTask extends TemplateSubTask {
/**
* Returns true if the class is an Ant task. This causes the task to be processed
* by the XDoclet template task.
*
* @todo implement more logic here
* - execute method could be on super class
* - execute method should return void and have no args
* - and only throw BuildException if at all
*/
protected boolean matchesGenerationRules(ClassDoc clazz) throws XDocletException {
return isAntTask(clazz);;
return isAntTask(clazz);
}

/**
* @todo pull out to utility method
* @todo revisit deprecated removal - perhaps need an @ant.task ignore="true"?
* Checks many factors to determine if the class is indeed an Ant task
* or not.
*
* @todo perhaps make deprecation switch configurable
*/
public static final boolean isAntTask(ClassDoc clazz) {
public static final boolean isAntTask(ClassDoc clazz) throws XDocletException {
if (clazz.isAbstract()) {
return false;
}
@@ -102,13 +97,21 @@ public class AntSubTask extends TemplateSubTask {
return false;
}

// remove deprecated tasks (controversial!)
String ignoreValue = XDocletTagSupport.getClassTagValue(clazz, "ant:task", "ignore", 0, null, "false", false, false);
boolean ignore = TypeConversionUtil.stringToBoolean(ignoreValue, true);

if (ignore) {
return false;
}

/* Leave deprecated tasks in for now
Tag[] tags = clazz.tags();
for (int i=0; i < tags.length; i++) {
for (int i = 0; i < tags.length; i++) {
if ("@deprecated".equals(tags[i].name())) {
return false;
}
}
*/

if (hasExecuteMethod(clazz)) {
return true;
@@ -117,13 +120,21 @@ public class AntSubTask extends TemplateSubTask {
return false;
}

private static boolean hasExecuteMethod (ClassDoc clazz) {
/**
* Check for class implementing an execute() method. Recursive calls are
* made to superclasses.
*/
private static boolean hasExecuteMethod(ClassDoc clazz) {
if (clazz == null) {
return false;
}

// It ain't a task if we've climbed back to Task itself
if ("org.apache.tools.ant.Task".equals(clazz.qualifiedName())) {
// It ain't a task if we've climbed back to Task itself.
// Also ignore other special Ant classes
if ("org.apache.tools.ant.Task".equals(clazz.qualifiedName()) ||
"org.apache.tools.ant.Target".equals(clazz.qualifiedName()) ||
"org.apache.tools.ant.TaskAdapter".equals(clazz.qualifiedName()) ||
"org.apache.tools.ant.UnknownElement".equals(clazz.qualifiedName())) {
return false;
}

@@ -147,16 +158,9 @@ public class AntSubTask extends TemplateSubTask {
* default class name.
*/
protected String getGeneratedFileName(ClassDoc clazz) throws XDocletException {
String filename = getDestinationFile();
String dir = getDestDir().getAbsolutePath();
String dir = TaskTagsHandler.getCategoryName(clazz);
String taskName = TaskTagsHandler.getTaskName(clazz);

if (filename.indexOf("{0}") != -1) {
dir = AntTagsHandler.getCategoryName(clazz);
String taskName = AntTagsHandler.getTaskName(clazz);
filename = MessageFormat.format(getDestinationFile(), new Object[]{taskName});
}

return new File(dir, filename).toString();
return new File(dir, taskName + ".xml").toString();
}

}

proposal/xdocs/src/org/apache/tools/ant/xdoclet/AntTagsHandler.java → proposal/xdocs/src/org/apache/tools/ant/xdoclet/TaskTagsHandler.java View File

@@ -82,13 +82,13 @@ import java.util.Properties;
* @todo need to create better logic for finding proper setters
* @todo add ifIsAntTask, among other convenience tags
*/
public class AntTagsHandler extends XDocletTagSupport {
public class TaskTagsHandler extends XDocletTagSupport {

/** Default category for tasks without a category attribute. */
public static final String DEFAULT_CATEGORY = "other";

/**
* @todo add check for execute method
* Iterates over all Ant tasks
*/
public void forAllTasks(String template, Properties attributes) throws XDocletException {
ClassDoc[] classes = AbstractProgramElementTagsHandler.getAllClasses();
@@ -98,13 +98,12 @@ public class AntTagsHandler extends XDocletTagSupport {
cur_class = classes[i];
setCurrentClass(cur_class);

if (AntSubTask.isAntTask(cur_class)) {
if (TaskSubTask.isAntTask(cur_class)) {
generate(template);
}
}
}


/**
* Iterates over all Ant attributes.
*
@@ -254,7 +253,6 @@ public class AntTagsHandler extends XDocletTagSupport {
return tagValue;
}


/**
* Provides the Ant category name.
*

+ 49
- 0
proposal/xdocs/templates/datatype_xdoc.template View File

@@ -0,0 +1,49 @@
<XDtTagDef:tagDef namespace="AntDatatype" handler="org.apache.tools.ant.xdoclet.DatatypeTagsHandler"/>
<XDtTagDef:tagDef namespace="AntTask" handler="org.apache.tools.ant.xdoclet.TaskTagsHandler"/>
<datatype name="<XDtAntDatatype:typeName/>"
classname="<XDtClass:fullClassName/>">
<short-description><![CDATA[<XDtClass:firstSentenceDescription/>]]></short-description>
<long-description>
<![CDATA[<XDtClass:classComment no-comment-signs="true"/>]]>
</long-description>

<structure>

<attributes>
<XDtAntTask:forAllAttributes>
<attribute name="<XDtMethod:propertyName/>" type="<XDtParameter:forAllMethodParams><XDtParameter:methodParamType/></XDtParameter:forAllMethodParams>">
<description><![CDATA[
<XDtMethod:methodComment no-comment-signs="true"/>
]]></description>
</attribute>
</XDtAntTask:forAllAttributes>
</attributes>

<elements>
<XDtAntTask:forAllElements>
<element name="<XDtAntTask:elementName/>" type="<XDtAntTask:elementType/>">
<description>
<![CDATA[<XDtMethod:methodComment no-comment-signs="true"/>]]>
</description>
<XDtClass:pushClass value="<XDtAntTask:elementType/>">
<XDtAntTask:ifHasAttributes>
<attributes>
<XDtAntTask:forAllAttributes>
<attribute name="<XDtMethod:propertyName/>" type="<XDtParameter:forAllMethodParams><XDtParameter:methodParamType/></XDtParameter:forAllMethodParams>">
<description><![CDATA[
<XDtMethod:methodComment no-comment-signs="true"/>
]]></description>
</attribute>
</XDtAntTask:forAllAttributes>
</attributes>
</XDtAntTask:ifHasAttributes>
</XDtClass:pushClass>
</element>

</XDtAntTask:forAllElements>
</elements>

</structure>
</datatype>



proposal/xdocs/templates/defaults_properties.template → proposal/xdocs/templates/task_defaults_properties.template View File

@@ -1,3 +1,3 @@
<XDtTagDef:tagDef namespace="Ant" handler="org.apache.tools.ant.xdoclet.AntTagsHandler"/>
<XDtTagDef:tagDef namespace="Ant" handler="org.apache.tools.ant.xdoclet.TaskTagsHandler"/>
<XDtAnt:forAllTasks><XDtAnt:taskName/>=<XDtClass:fullClassName/>
</XDtAnt:forAllTasks>

+ 2
- 1
proposal/xdocs/templates/task_xdoc.template View File

@@ -1,4 +1,4 @@
<XDtTagDef:tagDef namespace="Ant" handler="org.apache.tools.ant.xdoclet.AntTagsHandler"/>
<XDtTagDef:tagDef namespace="Ant" handler="org.apache.tools.ant.xdoclet.TaskTagsHandler"/>
<task name="<XDtAnt:taskName/>" category="<XDtAnt:categoryName/>"
classname="<XDtClass:fullClassName/>">

@@ -46,6 +46,7 @@
</elements>

<!-- @todo: wrap setCurrentMethod inside AntTagsHandler -->
<!-- @todo: create a XDtAnt:description wrapper for methodComment -->
<XDtMethod:setCurrentMethod name="addText" parameters="java.lang.String">
<body>
<description><![CDATA[


+ 3
- 0
proposal/xdocs/templates/type_defaults_properties.template View File

@@ -0,0 +1,3 @@
<XDtTagDef:tagDef namespace="Ant" handler="org.apache.tools.ant.xdoclet.DatatypeTagsHandler"/>
<XDtAnt:forAllDatatypes><XDtAnt:typeName/>=<XDtClass:fullClassName/>
</XDtAnt:forAllDatatypes>

Loading…
Cancel
Save