Skip to content

Commit e5d52dd

Browse files
sumitbhagwaniError Prone Team
authored and
Error Prone Team
committed
Don't crash for CaseKind.RULE in UnnecessaryDefaultInEnumSwitch
Fixes #2029 PiperOrigin-RevId: 351247217
1 parent ec44083 commit e5d52dd

File tree

2 files changed

+50
-0
lines changed

2 files changed

+50
-0
lines changed

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,10 @@ public Description matchSwitch(SwitchTree switchTree, VisitorState state) {
108108
private Description fixDefault(
109109
SwitchTree switchTree, CaseTree caseBeforeDefault, CaseTree defaultCase, VisitorState state) {
110110
List<? extends StatementTree> defaultStatements = defaultCase.getStatements();
111+
if (defaultStatements == null) {
112+
// TODO(b/177258673): provide fixes for `case -> ...`
113+
return buildDescription(defaultCase).setMessage(DESCRIPTION_REMOVED_DEFAULT).build();
114+
}
111115
if (trivialDefault(defaultStatements)) {
112116
// deleting `default:` or `default: break;` is a no-op
113117
return buildDescription(defaultCase)
@@ -184,6 +188,10 @@ private Description fixUnrecognized(
184188
List<? extends StatementTree> defaultStatements = defaultCase.getStatements();
185189
Description.Builder unrecognizedDescription =
186190
buildDescription(defaultCase).setMessage(DESCRIPTION_UNRECOGNIZED);
191+
if (defaultStatements == null) {
192+
// TODO(b/177258673): provide fixes for `case -> ...`
193+
return unrecognizedDescription.build();
194+
}
187195
if (trivialDefault(defaultStatements)) {
188196
// the default case is empty or contains only `break` -- replace it with `case UNRECOGNIZED:`
189197
// with fall out.

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

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,11 @@
1717
package com.google.errorprone.bugpatterns;
1818

1919
import static com.google.errorprone.BugCheckerRefactoringTestHelper.TestMode.TEXT_MATCH;
20+
import static org.junit.Assume.assumeTrue;
2021

2122
import com.google.errorprone.BugCheckerRefactoringTestHelper;
2223
import com.google.errorprone.CompilationTestHelper;
24+
import com.google.errorprone.util.RuntimeVersion;
2325
import org.junit.Test;
2426
import org.junit.runner.RunWith;
2527
import org.junit.runners.JUnit4;
@@ -779,4 +781,44 @@ public void messages() {
779781
"}")
780782
.doTest();
781783
}
784+
785+
@Test
786+
public void defaultCaseKindRule() {
787+
assumeTrue(RuntimeVersion.isAtLeast14());
788+
compilationHelper
789+
.addSourceLines(
790+
"Test.java",
791+
"class Test {",
792+
" enum Case { ONE, TWO }",
793+
" void m(Case c) {",
794+
" switch (c) {",
795+
" case ONE -> {}",
796+
" case TWO -> {}",
797+
" // BUG: Diagnostic contains: UnnecessaryDefaultInEnumSwitch",
798+
" default -> {}",
799+
" }",
800+
" }",
801+
"}")
802+
.doTest();
803+
}
804+
805+
@Test
806+
public void unrecognizedCaseKindRule() {
807+
assumeTrue(RuntimeVersion.isAtLeast14());
808+
compilationHelper
809+
.addSourceLines(
810+
"Test.java",
811+
"class Test {",
812+
" enum Case { ONE, TWO, UNRECOGNIZED }",
813+
" void m(Case c) {",
814+
" switch (c) {",
815+
" case ONE -> {}",
816+
" case TWO -> {}",
817+
" // BUG: Diagnostic contains: UnnecessaryDefaultInEnumSwitch",
818+
" default -> {}",
819+
" }",
820+
" }",
821+
"}")
822+
.doTest();
823+
}
782824
}

0 commit comments

Comments
 (0)