VS CodeでJavaの開発してたら急に「Null type safety not working...」のwarningがいっぱい出た
はじめに
タイトル通りで、急にエラーが出てきて最初は無視してたけどコーディングしていると流石に邪魔くさくなってきたので、消す方法を紹介します。

warningの数が90でえげつない
TL;DR
プロジェクト直下に.settings/org.eclipse.jdt.core.prefsファイルを作成して、
org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignoreを追加する。

開発環境
- PC
- MacBook Pro
- macOS(Sonoma)
- Other
- JDK Version
- 17.0.6
- VS Code Version
- 1.86.2
- Java extension version
- 1.28.1
- JDK Version
※筆者はSpringFrameworkを使用していますが、詳細に関しては割愛
調査
エラーの内容
Null type safety...のwarningは、warning詳細に記述されている値がnullの可能性があるため、nullチェックの必要はなくて大丈夫ですか?と言っています。
自作のメソッドであれば、処理内容を確認し、引数に@Nonnullアノテーションを付与することでwarningは解消される。

問題点
しかし、ビルトインのJavaのインターフェースを実装してメソッドをオーバーライドする場合などで問題があります。
例)AuthenticationEntryPointクラスのcommenceというメソッドをオーバーライドし、その中でHandlerExceptionResolverクラスのresolveExceptionというメソッドを呼んだとき。
@Override
public void commence(
HttpServletRequest request,
HttpServletResponse response,
AuthenticationException authException) throws IOException, ServletException {
resolver.resolveException(request, response, null, authException);
}
@Nullable
ModelAndView resolveException(
HttpServletRequest request,
HttpServletResponse response,
@Nullable Object handler,
Exception ex
);
このようなnullチェックが不要な場合にもwarningが表示され、同じような実装を行っている箇所のほとんどにwarningが表示されてしまいます。
原因
Eclipse JDT Language Serverのnull analysis optionsの生成処理で、JavaCore.COMPILER_PB_NULL_UNCHECKED_CONVERSIONをデフォルトで無視する(チェックしない)ようにする考慮漏れ。
調査段階ですでにissueは上がっていて、対応したPRもマージされているのを確認した。
- Closeされたissue
- 対応PR
解決方法
- プロジェクト直下に
.settings/org.eclipse.jdt.core.prefsファイルを作成して、
org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignoreを追加する。
ファイルを作成したあと、VS Codeのウィンドウをリロードすれば、warningが解消されているはず。
- 対応したPRがマージされているので、pre-release バージョンのVS Code Javaを試す(2024/03/01 筆者は試してないです。。)
Discussion