From 976ba1d3ee50b01d2c827f24ce1f1f06d90322e6 Mon Sep 17 00:00:00 2001 From: Romain Brenguier Date: Thu, 27 Aug 2026 17:20:54 +0200 Subject: [PATCH] Fix S9358: Move conditional expressions inside operations - AssertThrowsInsteadOfTryCatchFailCheck: move ternary inside Replacements constructor instead of duplicating it - AndroidMobileDatabaseEncryptionKeysCheck: move ternary inside arguments.get() call - JParser: inline ternary into firstTokenAfter() call and extract shared boolean to avoid duplicate e.isUpperBound() calls Co-Authored-By: Claude Opus 4.6 --- ...ssertThrowsInsteadOfTryCatchFailCheck.java | 30 ++++++++----------- ...roidMobileDatabaseEncryptionKeysCheck.java | 2 +- .../java/org/sonar/java/model/JParser.java | 16 +++++----- 3 files changed, 21 insertions(+), 27 deletions(-) diff --git a/java-checks/src/main/java/org/sonar/java/checks/AssertThrowsInsteadOfTryCatchFailCheck.java b/java-checks/src/main/java/org/sonar/java/checks/AssertThrowsInsteadOfTryCatchFailCheck.java index f90048c68f9..c5e56a9a894 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/AssertThrowsInsteadOfTryCatchFailCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/AssertThrowsInsteadOfTryCatchFailCheck.java @@ -169,15 +169,12 @@ private Replacements junitReplacement( ", %s".formatted(contentFor(argument)) ).orElse(""); - return isTryBlock ? - new Replacements( - "assertThrows(%s, () -> ".formatted(typeClass(firstCaughtTypeInTry(tryStatement))), - "%s);".formatted(argumentsSuffix) - ) : - new Replacements( - "assertDoesNotThrow(() -> ", - "%s);".formatted(argumentsSuffix) - ); + return new Replacements( + isTryBlock + ? "assertThrows(%s, () -> ".formatted(typeClass(firstCaughtTypeInTry(tryStatement))) + : "assertDoesNotThrow(() -> ", + "%s);".formatted(argumentsSuffix) + ); } private Replacements assertJReplacement( @@ -188,15 +185,12 @@ private Replacements assertJReplacement( var failureMessagePart = failArguments.isEmpty() ? "" : ".withFailMessage(%s)".formatted(contentFor(failArguments.get(0))); - return isTryBlock ? - new Replacements( - "assertThatCode(() -> ", - ")%s.isInstanceOf(%s);".formatted(failureMessagePart, typeClass(firstCaughtTypeInTry(tryStatement))) - ) : - new Replacements( - "assertThatCode(() -> ", - ")%s.doesNotThrowAnyException();".formatted(failureMessagePart) - ); + return new Replacements( + "assertThatCode(() -> ", + isTryBlock + ? ")%s.isInstanceOf(%s);".formatted(failureMessagePart, typeClass(firstCaughtTypeInTry(tryStatement))) + : ")%s.doesNotThrowAnyException();".formatted(failureMessagePart) + ); } private String contentFor(Tree tree) { diff --git a/java-checks/src/main/java/org/sonar/java/checks/security/AndroidMobileDatabaseEncryptionKeysCheck.java b/java-checks/src/main/java/org/sonar/java/checks/security/AndroidMobileDatabaseEncryptionKeysCheck.java index d26a20ee86b..9abfdf958af 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/security/AndroidMobileDatabaseEncryptionKeysCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/security/AndroidMobileDatabaseEncryptionKeysCheck.java @@ -92,7 +92,7 @@ public void visitNode(Tree tree) { private void reportIssueIfHardCoded(MethodInvocationTree mit, String argName) { Arguments arguments = mit.arguments(); - ExpressionTree passwordArg = arguments.size() == 1 ? arguments.get(0) : arguments.get(1); + ExpressionTree passwordArg = arguments.get(arguments.size() == 1 ? 0 : 1); reportIssueIfHardCoded(passwordArg, argName); } diff --git a/java-frontend/src/main/java/org/sonar/java/model/JParser.java b/java-frontend/src/main/java/org/sonar/java/model/JParser.java index 7e80b322777..95e31828c15 100644 --- a/java-frontend/src/main/java/org/sonar/java/model/JParser.java +++ b/java-frontend/src/main/java/org/sonar/java/model/JParser.java @@ -976,10 +976,11 @@ private EnumConstantTreeImpl processEnumConstantDeclaration(EnumConstantDeclarat final InternalSyntaxToken closeParToken; if (tokenManager.get(openParTokenIndex).tokenType == TerminalToken.TokenNameLPAREN) { openParToken = createSyntaxToken(openParTokenIndex); - ASTNode closeParAnchor = e.arguments().isEmpty() - ? e.getName() - : (ASTNode) e.arguments().get(e.arguments().size() - 1); - closeParToken = firstTokenAfter(closeParAnchor, TerminalToken.TokenNameRPAREN); + closeParToken = firstTokenAfter( + e.arguments().isEmpty() + ? e.getName() + : (ASTNode) e.arguments().get(e.arguments().size() - 1), + TerminalToken.TokenNameRPAREN); } else { openParToken = null; closeParToken = null; @@ -2738,11 +2739,10 @@ private JavaTree.WildcardTreeImpl convertWildcardType(WildcardType e) { if (bound == null) { t = new JavaTree.WildcardTreeImpl(questionToken); } else { - Tree.Kind wildcardKind = e.isUpperBound() ? Tree.Kind.EXTENDS_WILDCARD : Tree.Kind.SUPER_WILDCARD; - TerminalToken boundTokenType = e.isUpperBound() ? TerminalToken.TokenNameextends : TerminalToken.TokenNamesuper; + boolean isUpperBound = e.isUpperBound(); t = new JavaTree.WildcardTreeImpl( - wildcardKind, - firstTokenBefore(bound, boundTokenType), + isUpperBound ? Tree.Kind.EXTENDS_WILDCARD : Tree.Kind.SUPER_WILDCARD, + firstTokenBefore(bound, isUpperBound ? TerminalToken.TokenNameextends : TerminalToken.TokenNamesuper), convertType(bound) ).complete(questionToken); }