EnhancedSwitchBackwardMigrationInspection: insert break in statement switch, when may complete normally

This commit is contained in:
Roman.Ivanov
2018-12-07 16:26:58 +07:00
parent 23aef030d8
commit 27aabab966
5 changed files with 95 additions and 4 deletions
@@ -210,12 +210,12 @@ public class EnhancedSwitchBackwardMigrationInspection extends AbstractBaseJavaL
String caseValuesText = caseValues == null ? "" : ct.text(caseValues);
PsiStatement body = rule.getBody();
String finalBody;
if (!(body instanceof PsiBlockStatement) && body != null) {
if (body == null) {
finalBody = "";
} else if (!(body instanceof PsiBlockStatement)) {
finalBody = generateExpressionBranch(body, ct);
} else {
finalBody = StreamEx.of(ControlFlowUtils.unwrapBlock(body))
.map(el -> ct.text(el))
.joining("\n");
finalBody = generateBlockBranch(body, ct);
}
ct.grabComments(rule);
@@ -224,6 +224,12 @@ public class EnhancedSwitchBackwardMigrationInspection extends AbstractBaseJavaL
return prefix + ":" + finalBody;
}
String generateBlockBranch(@NotNull PsiStatement statement, CommentTracker ct) {
return StreamEx.of(ControlFlowUtils.unwrapBlock(statement))
.map(el -> ct.text(el))
.joining("\n");
}
abstract void handleBreakInside(@NotNull PsiBreakStatement breakStatement, CommentTracker ct);
abstract String generateExpressionBranch(@NotNull PsiStatement statement, CommentTracker ct);
@@ -290,5 +296,13 @@ public class EnhancedSwitchBackwardMigrationInspection extends AbstractBaseJavaL
String generateExpressionBranch(@NotNull PsiStatement statement, CommentTracker ct) {
return ct.text(statement) + "\nbreak;";
}
@Override
String generateBlockBranch(@NotNull PsiStatement statement, CommentTracker ct) {
if (ControlFlowUtils.statementMayCompleteNormally(statement)) {
return super.generateBlockBranch(statement, ct) + "\nbreak;";
}
return super.generateBlockBranch(statement, ct);
}
}
}
@@ -0,0 +1,19 @@
// "Replace with old style 'switch' statement" "true"
import java.util.*;
public class Main {
void foo(E e) {
switch (e) {
case E1, E2:
System.out.println("oops");
break;
default:
System.out.println("impossible");
break;
}
}
}
enum E {
E1, E2;
}
@@ -0,0 +1,19 @@
// "Replace with old style 'switch' statement" "true"
import java.util.*;
public class Main {
void foo(E e) {
switch (e) {
case E1, E2:
System.out.println("oops");
break;
default:
System.out.println("impossible");
return;
}
}
}
enum E {
E1, E2;
}
@@ -0,0 +1,19 @@
// "Replace with old style 'switch' statement" "true"
import java.util.*;
public class Main {
void foo(E e) {
switch<caret> (e) {
case E1, E2 -> {
System.out.println("oops");
}
default -> {
System.out.println("impossible");
}
}
}
}
enum E {
E1, E2;
}
@@ -0,0 +1,20 @@
// "Replace with old style 'switch' statement" "true"
import java.util.*;
public class Main {
void foo(E e) {
switch<caret> (e) {
case E1, E2 -> {
System.out.println("oops");
}
default -> {
System.out.println("impossible");
return;
}
}
}
}
enum E {
E1, E2;
}