我正在使用CheckerFramework并想要提取有效的@Nullable / @NonNull注释方法的返回值和参数,例如: some.package.Thing: Object compute(Object,Collection)
。我到目前为止找到的唯一方法是生成在不同的nullness上下文中使用此方法的源代码,以便我可以从检查器结果中推断出注释。但我很确定有一种方法可以扩展NullnessChecker,这样我就可以在类路径上给它一个方法句柄(通过反射获得)并导出有效的nullness注释。谁能给我一些关于从哪里开始的提示?
答案 0 :(得分:1)
作为背景,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。