Java: Better handling of unreachable code (IDEA-172642)

This commit is contained in:
Pavel Dolgov
2017-05-23 12:28:44 +03:00
parent da8b1f4a00
commit 16b1765f7f
19 changed files with 280 additions and 7 deletions
@@ -0,0 +1,93 @@
class WithCondition {
void testIf1(boolean b) {
return;
<error descr="Unreachable statement">if</error> (b) {
System.out.println("Never");
}
else {
System.out.println("Never ever");
}
}
void testIf2(boolean b) {
return;
<error descr="Unreachable statement">if</error> ((b)) {
System.out.println("Never");
}
}
void testSwitch(int b) {
return;
<error descr="Unreachable statement">switch</error> (b) {
case 1:
System.out.println("Never");
}
}
void testFor1(int b) {
return;
<error descr="Unreachable statement">for</error> (int i = 0; i < b; i++) {
System.out.println("Never");
}
}
void testFor2(int b) {
int i;
return;
<error descr="Unreachable statement">for</error> (i = 0; i < b; i++) {
System.out.println("Never");
}
}
void testFor3(int b) {
int i = 0;
return;
<error descr="Unreachable statement">for</error> (i++; i < b; i++) {
System.out.println("Never");
}
}
void testFor3(boolean b) {
return;
<error descr="Unreachable statement">for</error> (; b; ) {
System.out.println("Never");
}
}
void testFor4() {
return;
<error descr="Unreachable statement">for</error> (; ; ) {
System.out.println("Never");
}
}
void testFor5() {
int i = 0;
return;
<error descr="Unreachable statement">for</error> (; ; i++) {
System.out.println("Never");
}
}
void testWhile(boolean b) {
return;
<error descr="Unreachable statement">while</error> (b) {
System.out.println("Never");
}
}
void testDoWhile1(boolean b) {
return;
<error descr="Unreachable statement">do</error> System.out.println("Never");
while (b);
}
void testDoWhile2(boolean b) {
return;
<error descr="Unreachable statement">do</error> {
System.out.println("Never");
}
while (b);
}
}
@@ -0,0 +1,10 @@
class WithCondition {
void testForEach() {
return;
<error descr="Unreachable statement">for</error> (int i: this.array()) {
System.out.println("Never");
}
}
int[] array() { return new int[0]; }
}
@@ -0,0 +1,6 @@
// "Delete unreachable statement" "true"
class Never {
void foo(int n) {
return;
}
}
@@ -0,0 +1,6 @@
// "Delete unreachable statement" "true"
class Never {
void foo(boolean b) {
return;
}
}
@@ -0,0 +1,6 @@
// "Delete unreachable statement" "true"
class Never {
void foo() {
return;
}
}
@@ -0,0 +1,6 @@
// "Delete unreachable statement" "true"
class Never {
void foo(boolean b) {
return;
}
}
@@ -0,0 +1,6 @@
// "Delete unreachable statement" "true"
class Never {
void foo(int n) {
return;
}
}
@@ -0,0 +1,7 @@
// "Delete unreachable statement" "true"
class Never {
void foo(int n) {
return;
<caret>System.out.println(n);
}
}
@@ -0,0 +1,10 @@
// "Delete unreachable statement" "true"
class Never {
void foo(boolean b) {
return;
<caret>do {
System.out.println("Never");
}
while (b);
}
}
@@ -0,0 +1,9 @@
// "Delete unreachable statement" "true"
class Never {
void foo() {
return;
<caret>for (int i = 0; i < 2; i++) {
System.out.println("Never");
}
}
}
@@ -0,0 +1,11 @@
// "Delete unreachable statement" "true"
class Never {
void foo(boolean b) {
return;
<caret>if (b) {
System.out.println("Never");
} else {
System.out.println("Never ever");
}
}
}
@@ -0,0 +1,10 @@
// "Delete unreachable statement" "true"
class Never {
void foo(int n) {
return;
<caret>switch (n) {
case 1:
System.out.println("Never");
}
}
}