From 54352d557cdbe9d7e46cfb5a20e3f5e1af77c464 Mon Sep 17 00:00:00 2001 From: Tomasz Tylenda Date: Mon, 9 Mar 2026 10:52:17 +0100 Subject: [PATCH] Fix on switch on enum --- .../SwitchAtLeastThreeCasesCheckSample.java | 29 +++++++++++++++++++ .../checks/SwitchAtLeastThreeCasesCheck.java | 6 +++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/java-checks-test-sources/default/src/test/java/checks/tests/SwitchAtLeastThreeCasesCheckSample.java b/java-checks-test-sources/default/src/test/java/checks/tests/SwitchAtLeastThreeCasesCheckSample.java index e64a72f3220..5b9f18a53bf 100644 --- a/java-checks-test-sources/default/src/test/java/checks/tests/SwitchAtLeastThreeCasesCheckSample.java +++ b/java-checks-test-sources/default/src/test/java/checks/tests/SwitchAtLeastThreeCasesCheckSample.java @@ -79,4 +79,33 @@ public void f(int variable) { doSomethingElse(); } } + + public enum SmallEnum { + ONE, + TWO + } + + public void switchOverSmallEnum1(SmallEnum smallEnum) { + switch (smallEnum) { + case ONE -> { + System.out.println("1"); + } + case TWO -> { + System.out.println("2"); + } + }; + } + + public int switchOverSmallEnum2(SmallEnum smallEnum) { + int ret = -1; + switch (smallEnum) { + case ONE: + ret = 1; + break; + case TWO: + ret = 2; + break; + }; + return ret; + } } diff --git a/java-checks/src/main/java/org/sonar/java/checks/SwitchAtLeastThreeCasesCheck.java b/java-checks/src/main/java/org/sonar/java/checks/SwitchAtLeastThreeCasesCheck.java index 415c855d8f7..12bf92a3007 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/SwitchAtLeastThreeCasesCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/SwitchAtLeastThreeCasesCheck.java @@ -18,6 +18,7 @@ import org.sonar.check.Rule; import org.sonar.plugins.java.api.IssuableSubscriptionVisitor; +import org.sonar.plugins.java.api.semantic.Symbol; import org.sonar.plugins.java.api.tree.CaseGroupTree; import org.sonar.plugins.java.api.tree.CaseLabelTree; import org.sonar.plugins.java.api.tree.SwitchStatementTree; @@ -46,7 +47,10 @@ public void visitNode(Tree tree) { count += totalLabelCount(caseGroup); } if (count < 3) { - reportIssue(switchStatementTree.switchKeyword(), "Replace this \"switch\" statement by \"if\" statements to increase readability."); + Symbol.TypeSymbol typeSymbol = switchStatementTree.expression().symbolType().symbol(); + if (!typeSymbol.isUnknown() && !typeSymbol.isEnum()) { + reportIssue(switchStatementTree.switchKeyword(), "Replace this \"switch\" statement by \"if\" statements to increase readability."); + } } }