From e9633975d6a44415a0ae6af24b940aa78a416208 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 27 Aug 2026 13:04:38 +0200 Subject: [PATCH 1/2] Replace "if" statement with pattern match guard Reported by Sonar S6916 --- .../java/checks/CompilationOrPreparationInLoopCheck.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/java-checks/src/main/java/org/sonar/java/checks/CompilationOrPreparationInLoopCheck.java b/java-checks/src/main/java/org/sonar/java/checks/CompilationOrPreparationInLoopCheck.java index 8dfa122b5fd..db19387cbcf 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/CompilationOrPreparationInLoopCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/CompilationOrPreparationInLoopCheck.java @@ -200,10 +200,9 @@ public void visitAssignmentExpression(AssignmentExpressionTree tree) { public void visitUnaryExpression(UnaryExpressionTree tree) { super.visitUnaryExpression(tree); switch (tree.kind()) { - case POSTFIX_INCREMENT, POSTFIX_DECREMENT, PREFIX_INCREMENT, PREFIX_DECREMENT -> { - if (tree.expression().is(Tree.Kind.IDENTIFIER)) { - names.add(((IdentifierTree) tree.expression()).name()); - } + case POSTFIX_INCREMENT, POSTFIX_DECREMENT, PREFIX_INCREMENT, PREFIX_DECREMENT + when tree.expression().is(Tree.Kind.IDENTIFIER) -> { + names.add(((IdentifierTree) tree.expression()).name()); } default -> { // not a mutation From 11bd08eb0cf323b311836a927b6131da089e5507 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 27 Aug 2026 13:56:35 +0200 Subject: [PATCH 2/2] Remove "continue" statements and revert unsupported "when" guard Replace continue statements with inverted conditions in HashCodeMismatchedFieldsCheck and LocalVariablesShouldNotSpanSwitchCaseGroupsCheck. Revert the pattern match guard in CompilationOrPreparationInLoopCheck which used an unsupported "when" syntax, restoring the original "if" statement. Co-Authored-By: Claude Opus 4.6 --- .../CompilationOrPreparationInLoopCheck.java | 7 +++-- .../checks/HashCodeMismatchedFieldsCheck.java | 28 +++++++++---------- ...lesShouldNotSpanSwitchCaseGroupsCheck.java | 11 ++++---- 3 files changed, 22 insertions(+), 24 deletions(-) diff --git a/java-checks/src/main/java/org/sonar/java/checks/CompilationOrPreparationInLoopCheck.java b/java-checks/src/main/java/org/sonar/java/checks/CompilationOrPreparationInLoopCheck.java index db19387cbcf..8dfa122b5fd 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/CompilationOrPreparationInLoopCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/CompilationOrPreparationInLoopCheck.java @@ -200,9 +200,10 @@ public void visitAssignmentExpression(AssignmentExpressionTree tree) { public void visitUnaryExpression(UnaryExpressionTree tree) { super.visitUnaryExpression(tree); switch (tree.kind()) { - case POSTFIX_INCREMENT, POSTFIX_DECREMENT, PREFIX_INCREMENT, PREFIX_DECREMENT - when tree.expression().is(Tree.Kind.IDENTIFIER) -> { - names.add(((IdentifierTree) tree.expression()).name()); + case POSTFIX_INCREMENT, POSTFIX_DECREMENT, PREFIX_INCREMENT, PREFIX_DECREMENT -> { + if (tree.expression().is(Tree.Kind.IDENTIFIER)) { + names.add(((IdentifierTree) tree.expression()).name()); + } } default -> { // not a mutation diff --git a/java-checks/src/main/java/org/sonar/java/checks/HashCodeMismatchedFieldsCheck.java b/java-checks/src/main/java/org/sonar/java/checks/HashCodeMismatchedFieldsCheck.java index e2ca285604e..11726053b3d 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/HashCodeMismatchedFieldsCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/HashCodeMismatchedFieldsCheck.java @@ -118,15 +118,14 @@ private static EqualsAndHashCode find(ClassTree classTree) { MethodTree hashCodeMethod = null; List otherMethods = new ArrayList<>(); for (Tree member : classTree.members()) { - if (!(member instanceof MethodTree methodTree) || methodTree.block() == null) { - continue; - } - if (MethodTreeUtils.isEqualsMethod(methodTree)) { - equalsMethod = methodTree; - } else if (MethodTreeUtils.isHashCodeMethod(methodTree)) { - hashCodeMethod = methodTree; - } else { - otherMethods.add(methodTree); + if (member instanceof MethodTree methodTree && methodTree.block() != null) { + if (MethodTreeUtils.isEqualsMethod(methodTree)) { + equalsMethod = methodTree; + } else if (MethodTreeUtils.isHashCodeMethod(methodTree)) { + hashCodeMethod = methodTree; + } else { + otherMethods.add(methodTree); + } } } if (equalsMethod == null || hashCodeMethod == null) { @@ -140,12 +139,11 @@ private static Map> collectHelperFields(S Map> fieldsByHelper = new HashMap<>(); for (MethodTree helper : otherMethods) { Symbol.MethodSymbol helperSymbol = helper.symbol(); - if (helperSymbol.isUnknown() || !helper.parameters().isEmpty()) { - continue; - } - ReadAndAssignedFields helperFields = collectReadFields(helper, owner, Map.of(), Role.HELPER); - if (!helperFields.failed()) { - fieldsByHelper.put(helperSymbol, helperFields.readFields()); + if (!helperSymbol.isUnknown() && helper.parameters().isEmpty()) { + ReadAndAssignedFields helperFields = collectReadFields(helper, owner, Map.of(), Role.HELPER); + if (!helperFields.failed()) { + fieldsByHelper.put(helperSymbol, helperFields.readFields()); + } } } return fieldsByHelper; diff --git a/java-checks/src/main/java/org/sonar/java/checks/LocalVariablesShouldNotSpanSwitchCaseGroupsCheck.java b/java-checks/src/main/java/org/sonar/java/checks/LocalVariablesShouldNotSpanSwitchCaseGroupsCheck.java index 7896e744823..46517468300 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/LocalVariablesShouldNotSpanSwitchCaseGroupsCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/LocalVariablesShouldNotSpanSwitchCaseGroupsCheck.java @@ -51,12 +51,11 @@ public void visitNode(Tree tree) { List caseGroups = ((SwitchTree) tree).cases(); for (int index = 0; index < caseGroups.size(); index++) { CaseGroupTree caseGroup = caseGroups.get(index); - if (!caseGroup.labels().get(0).isFallThrough()) { - continue; - } - for (StatementTree statement : caseGroup.body()) { - if (statement instanceof VariableTree variable) { - reportIfAccessedFromLaterGroup(variable, caseGroups, index + 1); + if (caseGroup.labels().get(0).isFallThrough()) { + for (StatementTree statement : caseGroup.body()) { + if (statement instanceof VariableTree variable) { + reportIfAccessedFromLaterGroup(variable, caseGroups, index + 1); + } } } }