Browse Source

dramatically improved the "smarts" of finding real tasks. defaults.properties generation is just about there, which is sort of the litmus test to ensure that the right classes are being processed.

git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@271681 13f79535-47bb-0310-9956-ffa450edef68
master
Erik Hatcher 23 years ago
parent
commit
9b35ad50ac
1 changed files with 35 additions and 3 deletions
  1. +35
    -3
      proposal/xdocs/src/org/apache/tools/ant/xdoclet/AntSubTask.java

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

@@ -56,8 +56,10 @@ 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 java.io.File;
@@ -88,7 +90,7 @@ public class AntSubTask extends TemplateSubTask {

/**
* @todo pull out to utility method
* @todo add more logic (like execute method signature)
* @todo revisit deprecated removal - perhaps need an @ant.task ignore="true"?
*/
public static final boolean isAntTask(ClassDoc clazz) {
if (clazz.isAbstract()) {
@@ -100,14 +102,44 @@ public class AntSubTask extends TemplateSubTask {
return false;
}

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

if (hasExecuteMethod(clazz)) {
return true;
}

return false;
}

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())) {
return false;
}

// need to check that only runtime exceptions are thrown?
MethodDoc[] methods = clazz.methods();
for (int i = 0; i < methods.length; i++) {
if ("execute".equals(methods[i].name())) {
return true;
if (methods[i].parameters().length == 0) {
if (methods[i].returnType().typeName().equals("void")) {
return true;
}
}
}
}

return false;
return hasExecuteMethod(clazz.superclass());
}

/**


Loading…
Cancel
Save