methodDocType.setMethodSignature(methodDoc.signature()); methodDocType.setCommentText(methodDoc.commentText()); docProcessor.processMethodDoc(methodDoc, methodDocType);
protected ClassDoc implementsMethodInIntfac(MethodDoc method, ClassDoc[] intfacs) { for (int i = 0; i < intfacs.length; i++) { MethodDoc[] methods = intfacs[i].methods(); if (methods.length > 0) { for (int j = 0; j < methods.length; j++) { if (methods[j].name().equals(method.name()) && methods[j].signature().equals(method.signature())) { return intfacs[i]; } } } } return null; }
protected ClassDoc implementsMethodInIntfac(MethodDoc method, ClassDoc[] intfacs) { for (int i = 0; i < intfacs.length; i++) { MethodDoc[] methods = intfacs[i].methods(); if (methods.length > 0) { for (int j = 0; j < methods.length; j++) { if (methods[j].name().equals(method.name()) && methods[j].signature().equals(method.signature())) { return intfacs[i]; } } } } return null; }
/** * 检查两个方法对象的签名是否匹配<br> * @param method * @param doc * @return 不匹配返回-1,匹配返回>=0的值 */ private static int match(Method method, MethodDoc doc) { if (!method.getName().equals(doc.name()))return -1; Class<?>[] paramTypes = method.getParameterTypes(); String s1 = doc.signature().replaceAll("\\((.*)\\)", "$1"); String[] signature = s1.isEmpty()?new String[0]:s1.replace(" ", "").split(","); if (paramTypes.length != signature.length) return -1; int score = 0; for (int i = 0; i < paramTypes.length; ++i) { if (paramTypes[i].getName().equals(signature[i])) score += 2;// 完全匹配 else else if (paramTypes[i].getSimpleName().equals(signature[i])) score += 1; // 类名匹配 else { score = -1; break; } } return score; } /**
import com.sun.javadoc.ClassDoc; import com.sun.javadoc.Doclet; import com.sun.javadoc.MethodDoc; import com.sun.javadoc.RootDoc; import com.sun.tools.javadoc.Main; public class DocletTest { public static void main(String[] args) { Main.execute("", Analyzer.class.getName(), new String[] {"path/to/your/file.java"}); } public static class Analyzer extends Doclet { public static boolean start(RootDoc root) { for (ClassDoc classDoc : root.classes()) { System.out.println("Class: " + classDoc.qualifiedName()); for (MethodDoc methodDoc : classDoc.methods()) { System.out.println(" " + methodDoc.returnType() + " " + methodDoc.name() + methodDoc.signature()); } } return false; } } }
methodNode.setSynchronized(methodDoc.isSynchronized()); methodNode.setVarArgs(methodDoc.isVarArgs()); methodNode.setSignature(methodDoc.signature()); methodNode.setReturn(parseTypeInfo(methodDoc.returnType()));