diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/MissingDefault.java b/core/src/main/java/com/google/errorprone/bugpatterns/MissingDefault.java index 5ea53624666..0b6dc32646f 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/MissingDefault.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/MissingDefault.java @@ -67,7 +67,10 @@ public Description matchSwitch(SwitchTree tree, VisitorState state) { CaseTree lastCase = getLast(tree.getCases()); String replacement; List statements = lastCase.getStatements(); - if (statements == null + if (tree.getCases().stream() + .noneMatch(c -> c.getCaseKind() == CaseTree.CaseKind.STATEMENT)) { + replacement = "\ndefault -> {}\n"; + } else if (statements == null || statements.isEmpty() || Reachability.canCompleteNormally(Iterables.getLast(statements))) { replacement = "\nbreak;\ndefault: // fall out\n"; diff --git a/core/src/test/java/com/google/errorprone/bugpatterns/MissingDefaultTest.java b/core/src/test/java/com/google/errorprone/bugpatterns/MissingDefaultTest.java index 1f1920b2feb..c72a3d04ec8 100644 --- a/core/src/test/java/com/google/errorprone/bugpatterns/MissingDefaultTest.java +++ b/core/src/test/java/com/google/errorprone/bugpatterns/MissingDefaultTest.java @@ -339,4 +339,33 @@ void f(I i) { """) .doTest(); } + + @Test + public void arrowSwitchPositive() { + BugCheckerRefactoringTestHelper.newInstance(MissingDefault.class, getClass()) + .addInputLines( + "Test.java", + """ + class Test { + void f(int i) { + switch (i) { + case 0 -> System.err.println(i); + } + } + } + """) + .addOutputLines( + "Test.java", + """ + class Test { + void f(int i) { + switch (i) { + case 0 -> System.err.println(i); + default -> {} + } + } + } + """) + .doTest(); + } }