Once control flow has been moved out of the current code block, any subsequent statements become effectively unreachable.
Jump statements (return) move control flow out of the current code block. So any statements that come after a jump are dead code.
def foo(a: Int) {
val i = 10;
return a + i; // Noncompliant
bar; // dead code
}
def foo(a: Int): Int {
val i = 10;
return a + i;
}