将jOOQ表达式分配给局部变量时如何防止Eclipse添加@NotNull注释

How to prevent Eclipse from adding @NotNull annotation when assigning jOOQ expression to local variable

从 jOOQ 3.14 开始,使用 jOOQ 时代码如下:

DSL.val(1);

我喜欢将上述表达式分配给局部变量,所以我正在使用 Eclipse IDE 快速修复操作 “将语句分配给新的局部变量” ,它添加了这个导入:

import org.jetbrains.annotations.NotNull;

并生成此代码:

@NotNull
Param<Integer> val = DSL.val(1);

IntelliJ 不会发生这种情况,其 “引入局部变量” 快速修复生成所需的代码:

Param<Integer> val = DSL.val(1);

如何防止意外插入 @NotNull 注释?

Eclipse 中有一个待解决的错误可以修复此问题:https://bugs.eclipse.org/bugs/show_bug.cgi?id=565463。当前行为的基本原理(在 2020-12 (4.18.0) 中仍然存在)可以在那个问题中看到。

解决方法是在首选项 > Java 编译器 > Errors/Warnings > 启用基于注释的空分析

中打开基于注释的空分析

...并将 jetbrains 注释设置为主要 and/or 辅助注释:

Eclipse 可能找不到注释,在这种情况下,解决方法可能是手动编辑项目的 .settings/org.eclipse.jdt.core.prefs 文件,添加以下内容:

org.eclipse.jdt.core.compiler.annotation.nonnull=org.jetbrains.annotations.NotNull
org.eclipse.jdt.core.compiler.annotation.nullable=org.jetbrains.annotations.Nullable
org.eclipse.jdt.core.compiler.annotation.nullanalysis=enabled

此解决方法的副作用当然是空分析现在在 jOOQ 代码上处于活动状态,这可能是也可能不是您想要的。