== Why is this an issue?

Java 21 introduces `case null` for `switch`. It is a more concise and readable way to handle nullability compared to an `if` statement before a `switch`.
[source,java]
----
switch (s) {
  case null: /* code if null */
  // ...
}
----
When the selector expression evaluates to null and the `case null` is present, switch statements don't throw a NullPointerException anymore.
It is not mandatory anymore to test for `null` before a `switch`, and  it is more readable to use the `case null` form.

This rule identifies `if` statements that could be replaced by a more readable `case null` label.
[source,java]
----
if (s == null) {
  /* code if null */
}
switch (s) {
  // ...
}
----

== How to fix it

Move the null check inside the switch statement.

=== Code examples

==== Noncompliant code example

[source,java,diff-id=1,diff-type=noncompliant]
----
static void f(String s) {
  if (s == null) { // Noncompliant, we can move the null check in the switch statement.
    System.out.println("Oops!");
    return;
  }
  switch (s) {
    case "Foo", "Bar" -> System.out.println("Great");
    default           -> System.out.println("Ok");
   }
}
----

==== Compliant solution

[source,java,diff-id=1,diff-type=compliant]
----
static void f(String s) {
  switch (s) {
    case null         -> System.out.println("Oops!");
    case "Foo", "Bar" -> System.out.println("Great");
    default           -> System.out.println("Ok");
   }
}
----



== Resources
* https://openjdk.org/jeps/441[JEP 441: Pattern Matching for Switch]
