Skip to content

Commit d887307

Browse files
cushonError Prone Team
authored andcommitted
Omit some unnecessary break statements when translating to -> switches
PiperOrigin-RevId: 658578239
1 parent fe07236 commit d887307

File tree

2 files changed

+42
-10
lines changed

2 files changed

+42
-10
lines changed

core/src/main/java/com/google/errorprone/bugpatterns/StatementSwitchToExpressionSwitch.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,6 @@
3636
import com.google.common.base.Joiner;
3737
import com.google.common.collect.ImmutableList;
3838
import com.google.common.collect.ImmutableSet;
39-
import com.google.common.collect.Iterables;
4039
import com.google.common.collect.Streams;
4140
import com.google.errorprone.BugPattern;
4241
import com.google.errorprone.ErrorProneFlags;
@@ -585,7 +584,7 @@ private static SuggestedFix convertDirectlyToExpressionSwitch(
585584
groupedCaseCommentsAccumulator.length() == 0
586585
? null
587586
: groupedCaseCommentsAccumulator.toString(),
588-
transformedBlockSource.isEmpty() ? null : transformedBlockSource,
587+
transformedBlockSource.isEmpty() ? null : transformedBlockSource.trim(),
589588
commentsBeforeRemovedBreak.orElse(null),
590589
commentsAfterCaseOptional.orElse(null));
591590
}
@@ -902,7 +901,7 @@ && getStatements(caseTree).size() > filteredStatements.size()) {
902901
state
903902
.getSourceCode()
904903
.subSequence(
905-
state.getEndPosition(Iterables.getLast(filteredStatements)),
904+
state.getEndPosition(getLast(filteredStatements)),
906905
getStartPosition(getStatements(caseTree).get(getStatements(caseTree).size() - 1)))
907906
.toString()
908907
.trim();
@@ -952,11 +951,10 @@ private static String transformBlock(
952951

953952
StringBuilder transformedBlockBuilder = new StringBuilder();
954953
int codeBlockStart = extractLhsComments(caseTree, state, transformedBlockBuilder);
955-
int codeBlockEnd =
956-
filteredStatements.isEmpty()
957-
? getBlockEnd(state, caseTree)
958-
: state.getEndPosition(Streams.findLast(filteredStatements.stream()).get());
959-
transformedBlockBuilder.append(state.getSourceCode(), codeBlockStart, codeBlockEnd);
954+
if (!filteredStatements.isEmpty()) {
955+
int codeBlockEnd = state.getEndPosition(getLast(filteredStatements));
956+
transformedBlockBuilder.append(state.getSourceCode(), codeBlockStart, codeBlockEnd);
957+
}
960958

961959
return transformedBlockBuilder.toString();
962960
}

core/src/test/java/com/google/errorprone/bugpatterns/StatementSwitchToExpressionSwitchTest.java

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -361,7 +361,6 @@ public void switchByEnumCard2_removesRedundantBreaks_error() {
361361
" // Post break comment",
362362
" case DIAMOND -> {",
363363
" // Diamond break comment",
364-
" break;",
365364
" }",
366365
" case SPADE, CLUB -> System.out.println(\"everything else\");",
367366
" }",
@@ -1385,7 +1384,6 @@ public void switchByEnum_surroundingBracesCannotRemove_error() {
13851384
" switch(side) {",
13861385
" case OBVERSE -> {",
13871386
" // The quick brown fox, jumps over the lazy dog, etc.",
1388-
" break;",
13891387
" }",
13901388
" default -> ",
13911389
" throw new RuntimeException(\"Invalid type.\");",
@@ -3623,4 +3621,40 @@ public void i4222() {
36233621
.setArgs("-XepOpt:StatementSwitchToExpressionSwitch:EnableDirectConversion=true")
36243622
.doTest(BugCheckerRefactoringTestHelper.TestMode.TEXT_MATCH);
36253623
}
3624+
3625+
@Test
3626+
public void unnecessaryBreaks() {
3627+
assumeTrue(RuntimeVersion.isAtLeast14());
3628+
refactoringHelper
3629+
.addInputLines(
3630+
"Test.java",
3631+
"public class Test {",
3632+
" public static void main(String[] args) {",
3633+
" switch (args.length) {",
3634+
" case 0:",
3635+
" System.out.println(0);",
3636+
" break;",
3637+
" default:",
3638+
" // hello",
3639+
" // world",
3640+
" break;",
3641+
" }",
3642+
" }",
3643+
"}")
3644+
.addOutputLines(
3645+
"Test.java",
3646+
"public class Test {",
3647+
" public static void main(String[] args) {",
3648+
" switch (args.length) {",
3649+
" case 0 -> System.out.println(0);",
3650+
" default -> {",
3651+
" // hello",
3652+
" // world",
3653+
" }",
3654+
" }",
3655+
" }",
3656+
"}")
3657+
.setArgs("-XepOpt:StatementSwitchToExpressionSwitch:EnableDirectConversion=true")
3658+
.doTest(BugCheckerRefactoringTestHelper.TestMode.TEXT_MATCH);
3659+
}
36263660
}

0 commit comments

Comments
 (0)