From 9b35ad50ac0efc39cce65a99274f0f7acf2775c3 Mon Sep 17 00:00:00 2001 From: Erik Hatcher Date: Sun, 3 Mar 2002 01:49:54 +0000 Subject: [PATCH] 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 --- .../apache/tools/ant/xdoclet/AntSubTask.java | 38 +++++++++++++++++-- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/proposal/xdocs/src/org/apache/tools/ant/xdoclet/AntSubTask.java b/proposal/xdocs/src/org/apache/tools/ant/xdoclet/AntSubTask.java index 954924359..45fabf777 100644 --- a/proposal/xdocs/src/org/apache/tools/ant/xdoclet/AntSubTask.java +++ b/proposal/xdocs/src/org/apache/tools/ant/xdoclet/AntSubTask.java @@ -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()); } /**