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

Extract @Nullable/@NonNull annotations of given method handle

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

作为背景,Checker Framework lets you write annotations on types, such as List<@NonNull String>, but it also applies defaulting and inference

最终的类型注释被写入class文件。 因此,您可以使用读取 class 文件的工具。

  • javap -v MyFile.class 会显示很多信息,包括类型注释。

  • Annotation File Utilities read annotations from, and write annotations to, .java files, .class files, and text files. This is what I would use, but I am not sure of your use case. I would compile the .java file, then run extract-annotations mypackage.MyClass创建文本文件mypackage.MyClass.jaif。人或工具可以读取该文件。

  • 如果标注有run-time保留(大部分标注,比如@Nullable, do), you can also obtain them via reflection. This requires you to load the class under analysis, however. You can see a tutorial or another Stack Overflow question.