== Why is this an issue?

include::../description.adoc[]

=== Noncompliant code example

[source,java]
----
switch (param) {  //missing default clause
  case 0:
    doSomething();
    break;
  case 1:
    doSomethingElse();
    break;
}

switch (param) {
  default: // default clause should be the last one
    error();
    break;
  case 0:
    doSomething();
    break;
  case 1:
    doSomethingElse();
    break;
}
----

=== Compliant solution

[source,java]
----
switch (param) {
  case 0:
    doSomething();
    break;
  case 1:
    doSomethingElse();
    break;
  default:
    error();
    break;
}
----

=== Exceptions

If the ``++switch++`` parameter is an ``++Enum++`` and if all the constants of this enum are used in the ``++case++`` statements, then no ``++default++`` clause is expected.


Example:

[source,java]
----
public enum Day {
    SUNDAY, MONDAY
}
...
switch(day) {
  case SUNDAY: 
    doSomething();
    break;
  case MONDAY:
    doSomethingElse();
    break;
}
----

== Resources

* CWE - https://cwe.mitre.org/data/definitions/478[CWE-478 - Missing Default Case in Switch Statement]
* https://wiki.sei.cmu.edu/confluence/x/RtYxBQ[CERT, MSC01-C.] - Strive for logical completeness

ifdef::env-github,rspecator-view[]

'''
== Implementation Specification
(visible only on this page)

include::../message.adoc[]

'''
== Comments And Links
(visible only on this page)

include::../comments-and-links.adoc[]

endif::env-github,rspecator-view[]
