🤖

VS CodeでJavaの開発してたら急に「Null type safety not working...」のwarningがいっぱい出た

2024/03/03に公開

はじめに

タイトル通りで、急にエラーが出てきて最初は無視してたけどコーディングしていると流石に邪魔くさくなってきたので、消す方法を紹介します。
warningの画像
warningの数が90でえげつない

TL;DR

プロジェクト直下に.settings/org.eclipse.jdt.core.prefsファイルを作成して、
org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignoreを追加する。
warningの画像

開発環境

  • PC
    • MacBook Pro
    • macOS(Sonoma)
  • Other
    • JDK Version
      • 17.0.6
    • VS Code Version
      • 1.86.2
    • Java extension version
      • 1.28.1

※筆者は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);
}

https://spring.pleiades.io/spring-security/site/docs/current/api/org/springframework/security/web/AuthenticationEntryPoint.html

@Nullable
ModelAndView resolveException(
    HttpServletRequest request,
    HttpServletResponse response,
    @Nullable Object handler,
    Exception ex
);

https://spring.pleiades.io/spring-framework/docs/current/javadoc-api/org/springframework/web/servlet/HandlerExceptionResolver.html

このようなnullチェックが不要な場合にもwarningが表示され、同じような実装を行っている箇所のほとんどにwarningが表示されてしまいます。

原因

Eclipse JDT Language Serverのnull analysis optionsの生成処理で、JavaCore.COMPILER_PB_NULL_UNCHECKED_CONVERSIONをデフォルトで無視する(チェックしない)ようにする考慮漏れ。
調査段階ですでにissueは上がっていて、対応したPRもマージされているのを確認した。

解決方法

  1. プロジェクト直下に.settings/org.eclipse.jdt.core.prefsファイルを作成して、
    org.eclipse.jdt.core.compiler.problem.nullUncheckedConversion=ignoreを追加する。

https://github.com/redhat-developer/vscode-java/issues/3501#issuecomment-1952529229

ファイルを作成したあと、VS Codeのウィンドウをリロードすれば、warningが解消されているはず。

  1. 対応したPRがマージされているので、pre-release バージョンのVS Code Javaを試す(2024/03/01 筆者は試してないです。。)

https://github.com/redhat-developer/vscode-java/discussions/3507#discussioncomment-8557942

GitHubで編集を提案

Discussion