From 5f714121615cc1f65a8acee4eebbd1b5bf8f6bb7 Mon Sep 17 00:00:00 2001 From: Liam Miller-Cushon Date: Mon, 6 Oct 2025 10:38:58 -0700 Subject: [PATCH] Fix suggestion for missing defaults in `->` switches Suggest `default -> {}` instead of `default:` for `->` switches PiperOrigin-RevId: 815791571 --- .../bugpatterns/MissingDefault.java | 5 +++- .../bugpatterns/MissingDefaultTest.java | 29 +++++++++++++++++++ 2 files changed, 33 insertions(+), 1 deletion(-) 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(); + } }