提取给定方法句柄的@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.
我正在使用 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 runextract-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.