ehatcher 2002/07/15 08:57:12
Modified: proposal/xdocs build.xml
proposal/xdocs/templates task_xdoc.template
proposal/xdocs/src/org/apache/tools/ant/xdoclet
TaskTagsHandler.java
Log:
Bringing HEAD up to speed with the code I used to generate Appendix E of the
infamous Java Development with Ant book.
TODO: Convert to the new XDoclet, start progressing this to the mainstream so
that Ant 1.6 can have code-generated documentation finally.
Revision Changes Path
1.11 +3 -0 jakarta-ant/proposal/xdocs/build.xml
Index: build.xml
===================================================================
RCS file: /home/cvs/jakarta-ant/proposal/xdocs/build.xml,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- build.xml 22 Jun 2002 23:38:29 -0000 1.10
+++ build.xml 15 Jul 2002 15:57:12 -0000 1.11
@@ -42,6 +42,8 @@
<!-- javadoc is needed -->
<pathelement path="${java.class.path}"/>
+ <pathelement path="${ant.home}/lib/ant.jar"/>
+ <pathelement path="${ant.home}/lib/optional.jar"/>
<pathelement location="${build.dir}"/>
</path>
@@ -75,6 +77,7 @@
<fileset dir="${src.dir}">
<include name="**/*.java" unless="class.name"/>
<include name="**/*${class.name}*.java" if="class.name"/>
+ <exclude name="**/*${exclude.class.name}*.java"
if="exclude.class.name"/>
</fileset>
<!-- Generate XML task descriptor files -->
1.7 +4 -2 jakarta-ant/proposal/xdocs/templates/task_xdoc.template
Index: task_xdoc.template
===================================================================
RCS file: /home/cvs/jakarta-ant/proposal/xdocs/templates/task_xdoc.template,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- task_xdoc.template 22 Jun 2002 23:38:29 -0000 1.6
+++ task_xdoc.template 15 Jul 2002 15:57:12 -0000 1.7
@@ -15,8 +15,9 @@
<attributes>
<XDtAnt:forAllAttributes>
- <attribute name="<XDtMethod:propertyName/>"
type="<XDtParameter:forAllMethodParams><XDtParameter:methodParamType/></XDtParameter:forAllMethodParams>"
- <XDtMethod:ifHasMethodTag
tagName="deprecated">deprecated="true"</XDtMethod:ifHasMethodTag>>
+ <attribute name="<XDtAnt:propertyName/>"
type="<XDtParameter:forAllMethodParams><XDtParameter:methodParamType/></XDtParameter:forAllMethodParams>"
+ <XDtMethod:ifHasMethodTag
tagName="deprecated">deprecated="true"</XDtMethod:ifHasMethodTag>
+ briefType="<XDtAnt:displayAttributeType/>">
<short-description><![CDATA[<XDtAnt:shortMethodDescription/>]]></short-description>
<description><![CDATA[
<XDtMethod:methodComment no-comment-signs="true"/>
@@ -29,6 +30,7 @@
<XDtAnt:forAllElements>
<element name="<XDtAnt:elementName/>" type="<XDtAnt:elementType/>"
<XDtMethod:ifHasMethodTag
tagName="deprecated">deprecated="true"</XDtMethod:ifHasMethodTag>
+ briefType="<XDtAnt:displayElementType/>"
<XDtClass:pushClass value="<XDtAnt:elementType/>">
<XDtClass:ifIsClassAbstract>abstract="true"</XDtClass:ifIsClassAbstract>>
</XDtClass:pushClass>
1.4 +117 -15
jakarta-ant/proposal/xdocs/src/org/apache/tools/ant/xdoclet/TaskTagsHandler.java
Index: TaskTagsHandler.java
===================================================================
RCS file:
/home/cvs/jakarta-ant/proposal/xdocs/src/org/apache/tools/ant/xdoclet/TaskTagsHandler.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- TaskTagsHandler.java 22 Jun 2002 23:38:29 -0000 1.3
+++ TaskTagsHandler.java 15 Jul 2002 15:57:12 -0000 1.4
@@ -55,10 +55,11 @@
import com.sun.javadoc.*;
import org.apache.tools.ant.IntrospectionHelper;
+import org.apache.tools.ant.types.EnumeratedAttribute;
import xdoclet.XDocletException;
import xdoclet.XDocletTagSupport;
-import xdoclet.util.TypeConversionUtil;
import xdoclet.tags.AbstractProgramElementTagsHandler;
+import xdoclet.tags.MethodTagsHandler;
import java.util.ArrayList;
import java.util.Arrays;
@@ -69,12 +70,12 @@
import java.util.List;
import java.util.Map;
import java.util.Properties;
+import java.lang.reflect.InvocationTargetException;
/**
* 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
@@ -179,6 +180,100 @@
return elementName.toLowerCase();
}
+ static private Map attributeDisplayMap = new HashMap();
+ static private Map elementDisplayMap = new HashMap();
+
+ static {
+ attributeDisplayMap.put("java.lang.String","String");
+ attributeDisplayMap.put("boolean","boolean");
+ attributeDisplayMap.put("org.apache.tools.ant.types.Path","Path");
+
attributeDisplayMap.put("org.apache.tools.ant.types.Reference","Reference");
+ attributeDisplayMap.put("java.io.File","File");
+ attributeDisplayMap.put("java.util.Date","Date");
+ attributeDisplayMap.put("java.net.URL","URL");
+ attributeDisplayMap.put("java.lang.Long","long");
+ attributeDisplayMap.put("java.lang.Integer","int");
+ attributeDisplayMap.put("java.lang.Float","float");
+ attributeDisplayMap.put("java.lang.Double","double");
+
+ elementDisplayMap.put("org.apache.tools.ant.types.Path","Path");
+
elementDisplayMap.put("org.apache.tools.ant.types.FileSet","Fileset");
+ elementDisplayMap.put("org.apache.tools.ant.taskdefs.Property", "see
<property>");
+ elementDisplayMap.put("org.apache.tools.ant.types.Mapper","Mapper");
+ elementDisplayMap.put("org.apache.tools.ant.types.PatternSet",
"Patternset");
+
elementDisplayMap.put("org.apache.tools.ant.types.FileList","Filelist");
+ elementDisplayMap.put("org.apache.tools.ant.types.FilterChain",
"FilterChain");
+ elementDisplayMap.put("org.apache.tools.ant.types.FilterSet",
"Filterset");
+ elementDisplayMap.put("org.apache.tools.ant.types.ZipFileSet",
"ZipFileset");
+ elementDisplayMap.put("org.apache.tools.ant.types.DirSet", "Dirset");
+ elementDisplayMap.put("org.apache.tools.ant.types.XMLCatalog",
"XMLCatalog");
+ }
+
+ public String displayAttributeType() throws XDocletException {
+ String methodType =
getCurrentMethod().parameters()[0].type().qualifiedTypeName();
+ String display = (String) attributeDisplayMap.get(methodType);
+ if (display == null) {
+
+ System.out.println("type = " + methodType);
+ Class clazz = getAttributeClass(methodType);
+ if (clazz == null) {
+ return methodType;
+ }
+
+ Object instance = null;
+ try {
+ instance = clazz.newInstance();
+ } catch (InstantiationException e) {
+ } catch (IllegalAccessException e) {
+ }
+
+ if (instance != null && instance instanceof EnumeratedAttribute)
{
+ EnumeratedAttribute enum = (EnumeratedAttribute) instance;
+ String[] values = enum.getValues();
+ display = "";
+ for (int i=0; i < values.length; i++) {
+ display += """ + values[i] + """;
+ if (i != (values.length - 1)) {
+ display += ", ";
+ }
+ }
+ return display;
+ }
+
+ display = "";
+ }
+ return display;
+ }
+
+ private Class getAttributeClass(String type) throws XDocletException {
+ Class clazz = null;
+ try {
+ clazz = Class.forName(type);
+ } catch (ClassNotFoundException e) {
+ int lastDotPosition = type.lastIndexOf('.');
+ if (lastDotPosition < 0) {
+ // probably a primitive
+ return null;
+ }
+ type = type.substring(0,lastDotPosition) + "$" +
type.substring(lastDotPosition + 1);
+ try {
+ clazz = Class.forName(type);
+ } catch (ClassNotFoundException e1) {
+ throw new XDocletException(e1.getMessage());
+ }
+ }
+ return clazz;
+ }
+
+ public String displayElementType() throws XDocletException {
+ String elementType = elementType();
+ String display = (String) elementDisplayMap.get(elementType);
+ if (display == null) {
+ display = "";
+ }
+ return display;
+ }
+
/**
* Provides the element type for the current method
*/
@@ -194,7 +289,7 @@
* Provides the element type for the current method. If the return type
* is null, the first parameter is used.
*/
- private ClassDoc elementClassDoc() throws XDocletException {
+ private ClassDoc elementClassDoc() {
ClassDoc classDoc = null;
String methodName = getCurrentMethod().name();
if (methodName.startsWith("addConfigured") ||
@@ -215,26 +310,29 @@
* Provides the Ant task name.
*
* @see #getTaskName(ClassDoc)
- * @doc:tag type="content"
*/
public String taskName() throws XDocletException {
return getTaskName(getCurrentClass());
}
+ public String propertyName() {
+ return MethodTagsHandler.getPropertyNameFor( getCurrentMethod()
).toLowerCase();
+ }
+
private static String[] fluffPrefixes = { "set a","set the","sets
a","sets the" };
public String shortMethodDescription() throws XDocletException {
- Tag[] tags = getCurrentMethod().firstSentenceTags();
- String desc = null;
+ Tag[] tags = getCurrentMethod().firstSentenceTags();
+ String desc = null;
- if( tags != null && tags.length > 0 ) {
- desc = tags[0].text();
+ if( tags != null && tags.length > 0 ) {
+ desc = tags[0].text();
}
- if( desc == null || desc.length() == 0 )
- {
- desc = "no description";
- }
+ if( desc == null || desc.length() == 0 )
+ {
+ desc = "no description";
+ }
desc = desc.trim();
String descLower = desc.toLowerCase();
@@ -248,7 +346,11 @@
desc = desc.substring(0,1).toUpperCase() + desc.substring(1);
- return desc;
+ if (!desc.endsWith(".")) {
+ desc += ".";
+ }
+
+ return desc;
}
/**
@@ -428,7 +530,7 @@
continue;
}
- System.out.println("elementName = " + elementName);
+// System.out.println("elementName = " + elementName);
String elementType = null;
if (adder) {
if (method.parameters().length != 1) {
@@ -444,7 +546,7 @@
}
String mapElementType = elementTypeMap.getProperty(elementName);
- System.out.println("elementType = " + elementType + "
mapElementType = " + mapElementType);
+// System.out.println("elementType = " + elementType + "
mapElementType = " + mapElementType);
if (mapElementType == null) {
continue;
}
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>