我可以在自定义doclet的帮助下生成Javadoc注释吗?

时间:2018-01-11 09:53:24

标签: java javadoc doclet

我的意思是评论:

/**
*My Comment from database
*/

我的问题:

我收到了一堆根本没有评论的DTO。但是,SQL-Database中有注释。我可以通过发送查询然后检索ResultSet来获取这些注释。

我的任务是使用SQL数据库中的注释创建一个javadoc-API(作为HTML和javacode内部),以使代码库更易于理解。

我编写了一个小的java程序,用于从sql-database中检索注释。 我将找到的注释写入文件,其中包含上面显示的所需javadoc注释格式。 注释列中的任何文本都不表示注释为空(这没关系!)

这里要说明的是之前和之后的图片。 (不要担心文字是德语)

这就是它现在的样子

before

这是

之后的样子

after

如开头所述..我可以在自定义doclet的帮助下生成Javadoc注释(如此)吗?我被告知使用简单的java程序我的解决方案很好,但最好为这个任务制作一个doclet。

我尝试了什么:

我阅读了几篇关于该主题的Doclet概述,Javadoc常见问题解答和教程。我发现你可以从com.sun.javadoc扩展Doclet类。*;覆盖start(RootDoc root)方法。

有了这个,我可以借助这个自定义doclet打印所需包中的字段,标签和类方法。

除了这个用例之外,我没有找到关于如何实际编写自己的Doclet的详细信息。

甚至可以编写一个在代码中生成javadoc注释的doclet吗?或者使用我现有的解决方案来解决问题会更好吗?

这是我的自定义doclet:

package myPackage;

import com.sun.javadoc.*;

public class ListClass extends Doclet{

    public static void main(String[] args) {
        String[] blarg = new String[] {
                "-private", //shows private fields and methods
                "-doclet",
                "myPackage.ListClass", //Doclet to use
                "-sourcepath",
                "C:/DEV/workspace_jss/MyTestProject/src", //path to Package
                "myPackage" //package name
        };
        com.sun.tools.javadoc.Main.execute(blarg);
    }

    public static boolean start(RootDoc root) {
        ClassDoc[] classes = root.classes();

        for(ClassDoc cDoc : classes) {
            System.out.println(cDoc);

            FieldDoc fields[] = cDoc.fields();
            for(FieldDoc field : fields) {
                System.out.println("  field: " + field);
                System.out.println("     field name: " + field.name());
                System.out.println("     field commentText: " + field.commentText());
                System.out.println("     field type: " + field.type());

                Tag[] tags = field.tags();
                for(Tag tag : tags) {
                    System.out.println("  tag: " + tag);
                    System.out.println("     tag name: " + tag.name());
                    System.out.println("     tag text: " + tag.text());   
                }
            }

            MethodDoc methods[] = cDoc.methods();
            for(MethodDoc method : methods) {
                System.out.println("  method: " + method);
            }
        }

        return true;
    }
}

1 个答案:

答案 0 :(得分:2)

  

甚至可以编写一个在代码中生成javadoc注释的doclet吗?

基本上没有。 doclet无法在源代码中添加注释,因为原始源代码无法通过doclet API使用。 javadoc命令旨在源代码中提取 javadoc注释并将它们传递给doclet。

  

或者使用我现有的解决方案来解决问题会更好吗?

可能。

我实际上是从一个生成HTML的现有doclet开始的。我会修改它以查询数据库以提取注释,并在生成HTML时将它们与合并与RootDoc树中的注释一起使用。

我不会尝试生成添加了额外注释的源代码。但是你确实想要采用这种方法,你需要从一个不同的框架开始。