Browse Source

Fixed some issues with defaults.properties generation. Fixed issue with build having to be run twice because of directory being removed from the path (*arg*!).

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@271581 13f79535-47bb-0310-9956-ffa450edef68
master
Erik Hatcher 23 years ago
parent
commit
2d9c339208
4 changed files with 73 additions and 31 deletions
  1. +16
    -14
      proposal/xdocs/build.xml
  2. +28
    -7
      proposal/xdocs/src/org/apache/tools/ant/xdoclet/AntSubTask.java
  3. +27
    -7
      proposal/xdocs/src/org/apache/tools/ant/xdoclet/AntTagsHandler.java
  4. +2
    -3
      proposal/xdocs/templates/defaults_properties.template

+ 16
- 14
proposal/xdocs/build.xml View File

@@ -18,22 +18,19 @@
location="${template.dir}/task_xdoc.template"/> location="${template.dir}/task_xdoc.template"/>




<path id="xdoclet.classpath">
<pathelement location="${log4j.jar}"/>
<pathelement location="${xdoclet.jar}"/>

<!-- javadoc is needed -->
<pathelement path="${java.class.path}"/>
<pathelement location="${build.dir}"/>
</path>

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

<target name="init"> <target name="init">
<mkdir dir="${build.dir}" /> <mkdir dir="${build.dir}" />
<mkdir dir="${gen.dir}" /> <mkdir dir="${gen.dir}" />

<!-- hack, this should be outside a target but ${build.dir} gets stripped ?? -->
<path id="xdoclet.classpath">
<pathelement location="${log4j.jar}"/>
<pathelement location="${xdoclet.jar}"/>

<!-- javadoc is needed -->
<pathelement path="${java.class.path}"/>
<pathelement location="${build.dir}"/>
</path>
</target> </target>




@@ -49,6 +46,10 @@
<target name="gen" depends="compile"> <target name="gen" depends="compile">
<delete dir="${gen.dir}"/> <delete dir="${gen.dir}"/>


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

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


+ 28
- 7
proposal/xdocs/src/org/apache/tools/ant/xdoclet/AntSubTask.java View File

@@ -83,15 +83,31 @@ public class AntSubTask extends TemplateSubTask {
* - and only throw BuildException if at all * - and only throw BuildException if at all
*/ */
protected boolean matchesGenerationRules(ClassDoc clazz) throws XDocletException { protected boolean matchesGenerationRules(ClassDoc clazz) throws XDocletException {
MethodDoc[] methods = clazz.methods();


if (clazz.isAbstract()) { if (clazz.isAbstract()) {
return false; return false;
} }


return isAntTask(clazz);;
}

/**
* @todo pull out to utility method
* @todo add more logic (like execute method signature)
*/
public static final boolean isAntTask(ClassDoc clazz) {
if (clazz.isAbstract()) {
return false;
}

// no inner classes (for now - but is this possible? desired?)
if (clazz.containingClass() != null) {
return false;
}

MethodDoc[] methods = clazz.methods();
for (int i = 0; i < methods.length; i++) { for (int i = 0; i < methods.length; i++) {
if ("execute".equals(methods[i].name())) { if ("execute".equals(methods[i].name())) {
System.out.println("Task: " + clazz.name());
return true; return true;
} }
} }
@@ -104,12 +120,17 @@ public class AntSubTask extends TemplateSubTask {
* default class name. * default class name.
*/ */
protected String getGeneratedFileName(ClassDoc clazz) throws XDocletException { protected String getGeneratedFileName(ClassDoc clazz) throws XDocletException {
PackageDoc pak = clazz.containingPackage();
String packageName = PackageTagsHandler.packageNameAsPathFor(pak);
String taskName = AntTagsHandler.getTaskName(clazz);
String filename = MessageFormat.format(getDestinationFile(), new Object[]{taskName});
String filename = getDestinationFile();
String dir = getDestDir().getAbsolutePath();

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


return new File(packageName, filename).toString();
return new File(dir, filename).toString();
} }


} }

+ 27
- 7
proposal/xdocs/src/org/apache/tools/ant/xdoclet/AntTagsHandler.java View File

@@ -57,6 +57,7 @@ import com.sun.javadoc.ClassDoc;
import com.sun.javadoc.MethodDoc; import com.sun.javadoc.MethodDoc;
import xdoclet.XDocletException; import xdoclet.XDocletException;
import xdoclet.XDocletTagSupport; import xdoclet.XDocletTagSupport;
import xdoclet.tags.AbstractProgramElementTagsHandler;


import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@@ -80,6 +81,24 @@ import java.util.Properties;
*/ */
public class AntTagsHandler extends XDocletTagSupport { public class AntTagsHandler extends XDocletTagSupport {


/**
* @todo add check for execute method
*/
public void forAllTasks(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 (AntSubTask.isAntTask(cur_class)) {
generate(template);
}
}
}


/** /**
* Iterates over all Ant attributes. * Iterates over all Ant attributes.
* *
@@ -120,21 +139,22 @@ public class AntTagsHandler extends XDocletTagSupport {
} }
} }



/** /**
* Provides the element name for the current method * Provides the element name for the current method
*/ */
public String elementName() throws XDocletException { public String elementName() throws XDocletException {
String methodName = getCurrentMethod().name(); String methodName = getCurrentMethod().name();
System.out.println(">>>> " + methodName);
String elementName = "<not a valid element>"; String elementName = "<not a valid element>";
if (methodName.startsWith("addConfigured")) { if (methodName.startsWith("addConfigured")) {
elementName = methodName.substring(13,methodName.length());
} else if (methodName.startsWith("add")) {
elementName = methodName.substring(3,methodName.length());
} else if (methodName.startsWith("create")) {
elementName = methodName.substring(6,methodName.length());
elementName = methodName.substring(13, methodName.length());
}
else if (methodName.startsWith("add")) {
elementName = methodName.substring(3, methodName.length());
}
else if (methodName.startsWith("create")) {
elementName = methodName.substring(6, methodName.length());
} }
System.out.println(" = " + elementName);
return elementName.toLowerCase(); return elementName.toLowerCase();
} }




+ 2
- 3
proposal/xdocs/templates/defaults_properties.template View File

@@ -1,5 +1,4 @@
<XDtTagDef:tagDef namespace="Ant" handler="org.apache.tools.ant.xdoclet.AntTagsHandler"/> <XDtTagDef:tagDef namespace="Ant" handler="org.apache.tools.ant.xdoclet.AntTagsHandler"/>
<!-- @todo: add forAllTasks -->
<XDtClass:forAllClasses>
<XDtAnt:forAllTasks>
<XDtAnt:taskName/>=<XDtClass:fullClassName/> <XDtAnt:taskName/>=<XDtClass:fullClassName/>
</XDtClass:forAllClasses>
</XDtAnt:forAllTasks>

Loading…
Cancel
Save