提取给定方法句柄的@ Nullable / @NonNull注释

时间:2018-03-16 08:27:53

标签: java checker-framework

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

1 个答案:

答案 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,请执行),您也可以通过反射获取它们。但是,这需要您加载正在分析的类。您可以看到tutorialanother Stack Overflow question