问题标签 [checker-framework]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Pluggable Type Checkers 和 Checkers 框架,真的需要所有这些设置吗?
我试图了解 Checker Framework 如何实现可插入类型检查器。通过阅读文档,
我看到涉及很多设置,在我看来要么已经过时,要么没有完全维护。
据我所知,Java 8 在 JSR-308 和 JSR-269 上支持类型注释和可插入类型检查器,允许接口在几乎每个元素上创建自定义注释,并使用带有简单标志的接口代码片段对其进行处理在 javac (-processor) 上,maven 支持通过META-INF/services/javax.annotation.processing.Processor
那么为什么文档指出 Checker 需要这么多的定制..?:
我认为自 Java 8 特性以来,Checker 框架实际上一直是自定义注释处理器的集合。是这样吗?似乎不再需要启用编译器、创建自定义检查 (JSR-269) 和启用/* @Nullable */
等等......我很乐意纠正
java - 如何使用 Kotlin 反射获得 Java 类型的可空性?
当我使用 Kotlin 反射来获取Kotlin属性的可空性时,就像val nullableString: String?
我在. 它也适用于“内部”类型,例如不仅整个列表可以为空,而且单个元素也可以为.isMarkedNullable
KType
val nullableList: List<String?>?
null
我也想对Java类型使用相同的机制。它部分有效,例如当我有类似public @javax.annotation.Nullable String text;
. 但@javax.annotation.Nullable
不能这样使用,public List<@Nullable String> list;
因为它没有TYPE_USE
目标。所以我想使用@org.checkerframework.checker.nullness.qual.Nullable
,但是 Kotlin 反射忽略了这个注释。
这是一些测试:
产生以下输出:
是否可以告诉 Kotlin 反射使用哪些注释?他们是否计划支持 Checker 框架?我会很感激任何评论。谢谢
checker-framework - NullnessChecker 错误:java.lang.NoSuchFieldError:RELEASE
我不能再用检查器框架构建我的代码了。当我注释掉检查器框架注释处理器时,我的代码编译得很好,所以问题不在于我的代码。使用该框架,我收到以下错误消息:
(完整的堆栈跟踪位于底部。)
此堆栈跟踪没有引用我的代码中的任何内容。这似乎是空值检查器中的一个错误。
我正在使用当前版本的 maven (3.6.3) 和 maven 编译器插件 (3.8.1)。我正在使用 JDK 1.8。
要查看 pom.xml 文件和代码,请查看位于https://github.com/SwingGuy1024/CheckerNoSuchFieldErrorBug的存储库 这是 pom 文件的链接:https ://github.com/SwingGuy1024/CheckerNoSuchFieldErrorBug/blob/master /pom.xml
要使用 Maven 重现错误,请下载存储库并键入mvn clean install
这是完整的堆栈跟踪:
java - Checkerframework 替换注解
我是 Checker Framework 的新手,我已经定义了 2 个子类型注释,如下所示:
和
当我在以下代码上使用带有这些注释的子类型检查器时,它会产生错误,因为 sink() 需要一个标记为 @Sub 的字符串,但接收到 @Base(String s0 的默认值),这是预期的行为。
现在我想添加第三个注释,例如称为 @ToSub 并像这样使用它:
这第三个注释应该将当前类型的 s0 (@Base) 转换为新字符串 s1 的子类型 @Sub,以便此代码示例不会引发错误。
使用 Checker Framework 是否有可能?我无法通过定义一个新的注释来完成这个任务,我错过了什么吗?这只能通过编写一个全新的检查器来完成吗?
java - 如何在存根中注释隐式参数
我正在尝试使用 Nullness Checker 来构建 JPanel 的子类。
错误消息说:
问题似乎是 add 方法假定this
已初始化。但是在构造函数中调用 Container 的 add 方法是非常安全的。所以为了防止这个错误,我想创建一个带有带注释的隐式参数的存根文件:
它似乎没有将add()
这里的方法识别为java.awt.Container.add(Component, Object)
方法。
这是完整的存根文件:
我知道我可以使用注释来抑制警告,但存根文件感觉像是一种更简洁的方法。有没有办法修复这个存根文件?
maven-compiler-plugin - 为生成的代码排除 NullnessChecker 注释处理器
我正在将 Nullness Checker 从检查器框架集成到我们使用 Maven 构建的 Java 项目中。maven-compiler-plugin
我为插件配置了注释处理器。一切正常,除了我不希望它通过生成的代码运行。
排除对target
目录中的代码或特定 java 包使用这些注释处理器可能会有所帮助,但我不知道该怎么做。
我还尝试为 Nullness Checker 本身查找配置以排除目录或 java 包。我再次找不到任何东西。
这是我的插件配置:
java - 从 checkerframework 解决 Nullness 错误
我有一些 java 代码,如下所示
这给了我错误
这是无法理解的,getFoo
因为它被装饰了Nullable
。
我可以在不修改bar
方法的情况下防止这种情况吗?这两种方法getFoo
都bar
超出了我的控制范围,无法进行修改。解决此问题的解决方案是什么?
java - 类型参数中的检查器框架不兼容类型
我有一些这样的代码,我将映射存储到java threadlocal,
从 checkerframework 启用空值检查时,我得到
我不明白如何解决这个问题。
java - maven 编译器插件不通过编译器 J-Xbootclasspath/p args
-J-Xbootclasspath/p: 不是由 maven 编译器插件传递的,我该如何解决?
系统环境:jdk 1.8.0_265,windows 10.
maven 文件:我从 CheckerFramework 示例pom.xml复制它。
当我第一次通过 mvn clean compile 运行它时,它与
无法在项目 MavenExample 上执行目标 org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile)Example:编译失败
所以我运行 mvn clean compile -X 然后发现 -J-Xbootclasspath/p:/path/to/javac.jar 不包含在命令行选项中。
然后我在其中包含“-J-Xbootclasspath/p”并手动 javac 编译它,它成功了。但是我需要在maven中使用它,所以我问了这个问题。
这是打印的失败命令行选项
[调试]
-d D:\workproject\TestCheck\target\classes
-classpath D:\workproject\TestCheck\target\classes;C:\Users\张云.m2\repository\org\checkerframework\checker-qual\3.6。 1\checker-qual-3.6.1.jar;C:\Users\张云.m2\repository\com\google\errorprone\javac\9+181-r4173-1\javac-9+181-r4173-1。 jar;C:\Users\张云.m2\repository\org\apache\commons\commons-lang3\3.1\commons-lang3-3.1.jar;C:\Users\张云.m2\repository\javax\servlet\ servlet-api\2.4\servlet-api-2.4.jar;
-sourcepath D:\workproject\TestCheck\src\main\java;D:\workproject\TestCheck\target\generated-sources\annotations; D:\workproject\TestCheck\src\main\java\Main.java -s D:\workproject\TestCheck\target\generated-sources\annotations
-processor org.checkerframework.checker.nullness.NullnessChecker
-processorpath C:\Users\张云.m2\repository\org\checkerframework\checker\3.6.1\checker-3.6.1.jar;-g -verbose -target 1.8 -source 1.8 -encoding UTF-8 -Alint
这是完整的日志文件日志
和项目文件
java - 如何使用 Checker 框架将 NNEL(非 Null 除局部变量)声明为 API 的默认值
过去的手册和 Stackoverflow 的答案都说 NNEL 是 Checker Framework 中的默认值。但是,最近的手册(3.7.1)不再提及该术语。
我在一个包裹上试过这个:
这行得通,但是,我不能声明:
结果是:
问题:
- 现在默认是什么?
- NNEL 概念是否包含类型参数?
- 如何
module-info.java
以尽可能最短的形式为包或更多逻辑为 Java 模块 ( ) 建立 NNEL? - 如果 NEEL 不包含类型参数,我怎样才能
EntryProcessor<K, V, @Nullable R>
有效地建立默认值EntryProcessor<@NonNull K, @NonNull V, @Nullable R>
?