java - JavaDocs:如何创建自定义标记
问题描述
我正在创建一套用 Kotlin 编写的仪器测试,它将影响许多 Web API。我计划将这些测试实施到我们的 CI/CD 流程中。话虽如此,我想为每个测试添加详细的文档,以实现可维护性、验证场景覆盖率等。
目前,我正在使用 JavaDocs 作为文档;但是,只有少数标记,其中大部分与测试文档无关(@return、@see、@author、@param、@exception、@sample、@simple、@since、@suppress 和 @throws )。因此,我想知道是否有办法创建自定义标记并将它们实施到我的文档中?例如,@scenario 或@expected?
解决方案
您需要使用自定义 doclet。请参阅“创建和处理自定义标签”
例如,假设您想
@mytag
在文档注释中使用自定义标签,比如@param
和等标准标签@return
。要使用自定义标签中的信息,您需要让 doclet 使用代表自定义标签的 Tag 实例。最简单的方法之一是使用 Doc 的 tags(String) 方法或 Doc 的子类之一。此方法返回一个 Tag 对象数组,表示名称与字符串参数匹配的任何标签。例如,如果 method 是 MethodDoc 的一个实例,那么method.tags("mytag")
将返回一个 Tag 对象数组,表示
@mytag
方法文档注释中的任何标签。然后,您可以@mytag
使用 Tag 的 text 方法访问标签中的信息。该方法返回一个表示标签内容的字符串,您可以根据需要对其进行解析或使用。例如,如果文档注释包含您的自定义标签之一,如下所示:@mytag Some dummy text.
那么 text 方法将返回字符串“Some dummy text.”。这是一个独立的 doclet(不是标准 doclet 的子类),它使用这些想法打印出与它在方法注释中找到的指定标记的所有实例相关联的文本。它可以扩展为在所有评论中查找该标签的所有实例。
import com.sun.javadoc.*; public class ListTags { public static boolean start(RootDoc root){ String tagName = "mytag"; writeContents(root.classes(), tagName); return true; } private static void writeContents(ClassDoc[] classes, String tagName) { for (int i=0; i < classes.length; i++) { boolean classNamePrinted = false; MethodDoc[] methods = classes[i].methods(); for (int j=0; j < methods.length; j++) { Tag[] tags = methods[j].tags(tagName); if (tags.length > 0) { if (!classNamePrinted) { System.out.println("\n" + classes[i].name() + "\n"); classNamePrinted = true; } System.out.println(methods[j].name()); for (int k=0; k < tags.length; k++) { System.out.println(" " + tags[k].name() + ": " + tags[k].text()); } } } } } }
此 doclet 搜索的标记由变量 tagName 指定。tagName 字符串的值可以是任何标签名称,自定义的或标准的。此 doclet 写入标准输出,但可以修改其输出格式,例如,将 HTML 输出写入文件。
推荐阅读
- php - 尝试执行更新方法时,路由不支持 PUT 方法
- c++ - 我可以在 VS2019 中使用旧的次要版本的 C++ 编译器吗?
- java - 在执行将使用 Java 库获取数据的基于本机的 Java 代码之前,如何让我的 Flutter 的第一个屏幕显示出来
- amazon-web-services - 如何更新嵌套数组对象 DynamoDb AWS 中的属性
- python - Python Lambda没有找到这样的文件或目录运行时问题
- arrays - 锁定图表的数据范围
- c# - 如何创建字典
来自 IEnumearble > - java - 如何将String转换为hashmap
- android - 为什么加载长数据时应用程序冻结
- mysql - 有没有比'username'@'%'更安全的远程访问sql server的解决方案?