我正在使用 CheckerFramework,想要提取方法的返回值和参数的有效 @Nullable/@NonNull 注释,例如some.package.Thing:对象计算(对象,集合)
。到目前为止,我发现的唯一方法是生成在不同的空上下文中使用此方法的源代码,以便我可以从检查器结果推断注释。但我非常确定有一种方法可以扩展 NullnessChecker,这样我就可以给它一个类路径上方法的方法句柄(通过反射获得)并导出有效的 nullness 注释。有人可以给我一些关于从哪里开始的提示吗?
最佳答案
作为背景,Checker Framework允许您在类型上编写注释,例如 List<@NonNull String>
,但它也适用 defaulting and inference .
最终的类型注释被写入类文件中。 因此,您可以使用读取类文件的工具。
javap -v MyFile.class
将向您显示大量信息,包括类型注释。Annotation File Utilities从
.java
读取注释并向其写入注释文件,.class
文件和文本文件。这就是我会使用的,但我不确定你的用例。我会编译.java
文件,然后运行 extract-annotations mypackage.MyClass
创建文本文件mypackage.MyClass.jaif
。人或工具可以读取该文件。如果注释具有运行时保留(大多数注释,例如
@Nullable
),您也可以通过反射获取它们。然而,这需要您加载正在分析的类。你可以看到一个tutorial或another Stack Overflow question .
关于java - 提取给定方法句柄的 @Nullable/@NonNull 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49316131/