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

标签 java checker-framework

我正在使用 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 ),您也可以通过反射获取它们。然而,这需要您加载正在分析的类。你可以看到一个tutorialanother Stack Overflow question .

关于java - 提取给定方法句柄的 @Nullable/@NonNull 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49316131/

相关文章:

Java:为什么反序列化不调用构造函数以及最好的解决方法是什么?

java - Servlet 和同步

java - Checkerframework替换注解

java - 如何规避检查框架 type.invalid 错误?

java - Checker 框架将 @Initialized 值作为 @UnderInitialization 参数传递

java - 是否可以在编译时以外的运行时进行验证检查?

java - SWT中如何控制工具栏Item的位置?

java - Android自定义库兼容性

java - Rest 服务出现 404 错误 - Jersey/tomcat8

Java collect 方法与 Checker 框架不兼容