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