Java:如何使用自定义doclet获取方法的注释不是Javadoc!

问题描述

我为自己编写了一个自定义doclet。我正在使用JDK 1.8。 (我必须这样做。)

import com.sun.javadoc.*;

import java.util.Formatter;

public class TagFunction {
    private final static Formatter formatter = new Formatter();

    public static boolean start(RootDoc root) {
        for (ClassDoc clazz : root.classes()) {
            processClass(clazz);
        }
        return true;
    }

    private static void processClass(ClassDoc clazz) {
        for (AnnotationDesc anno : clazz.annotations()) {
            formatter.format("Annotation %s%n",anno);
        }
        for (MethodDoc method : clazz.methods()) {
              formatter.format("Method %s%n",method);
              for (Tag tag : method.tags()) {
                  formatter.format("Tag %s%n",tag);
              }
              if(!(method.commentText().isEmpty())) {
                  formatter.format("Beschreibung: %s%n",method.commentText());
              }
              formatter.format("%n");
        }
        System.out.println(formatter);
    }
}

当然,我在课堂上用过它。

//import org.junit.jupiter.api.Test;

public class MyClass {
    /**
     * @param a
     * @since 1.1
     * @see a
     * @a asdf
     * @b asdfsfd
     * @c asfsdf
     */

    @Override
    public void a(String a) {

    }

}

它的工作方式与我预期的不同。首先,我很困惑 anno 不返回任何内容。我也不确定,为什么我不能从方法获取 @Override ,而不能从JavaDoc中获取所有其他自定义注释。

这是我的输出

XXX\.jdks\corretto-1.8.0_265\bin\javadoc.exe" -docletpath . -doclet TagFunction MyClass.java
Loading source file MyClass.java...
Constructing Javadoc @R_765_4045@ion...
Method MyClass.a(java.lang.String)
Tag @param:a
Tag @since:1.1
Tag @see:a
Tag @a:asdf
Tag @b:asdfsfd
Tag @c:asfsdf

问题1: ClassDoc.AnnotationDesc 到底有什么用?我以为它将输出标签

问题2:如何获取doclet以输出 @Override 标签?下一步将是使用 @Test 标记尝试,但是如果我尝试了,我的cmd.exe会告诉我这不是有效的Java代码 Javadoc.exe 似乎找不到包 org.junit.jupiter.api.Test; ,这就是为什么我现在不包括该行的原因。

问题3:有人可以向我解释注释和标签间的区别吗?这两个词在大多数文档和网站上似乎可以互换使用。我认为每一个标记,无论是以@开头的JavaDocs中方法或文档的元数据都是注解/标签,也许有些区别我都不知道。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)