diff --git a/java-checks-test-sources/default/src/main/java/checks/ReplaceUnusedExceptionParameterWithUnnamedPatternCheckSample.java b/java-checks-test-sources/default/src/main/java/checks/ReplaceUnusedExceptionParameterWithUnnamedPatternCheckSample.java index 1a670d0db81..84dd7a01719 100644 --- a/java-checks-test-sources/default/src/main/java/checks/ReplaceUnusedExceptionParameterWithUnnamedPatternCheckSample.java +++ b/java-checks-test-sources/default/src/main/java/checks/ReplaceUnusedExceptionParameterWithUnnamedPatternCheckSample.java @@ -1,7 +1,11 @@ package checks; import io.restassured.exception.PathException; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + import java.util.List; +import java.util.concurrent.*; import java.util.function.Supplier; public class ReplaceUnusedExceptionParameterWithUnnamedPatternCheckSample { @@ -121,4 +125,22 @@ public void foo(Exception e) { } public void e(){} + + private final Logger log = LogManager.getLogger(); + + private void executor_run_compliant() { + ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(); + executor.scheduleAtFixedRate( + () -> { + try { + Integer.parseInt("1.2"); + } catch (Exception e) { + log.error("SonarQube Cloud reports 'e' should be replaced by _ while it's used", e); + } + }, + 0, + 100_000, + TimeUnit.MILLISECONDS + ); + } } diff --git a/java-checks/src/main/java/org/sonar/java/checks/ReplaceUnusedExceptionParameterWithUnnamedPatternCheck.java b/java-checks/src/main/java/org/sonar/java/checks/ReplaceUnusedExceptionParameterWithUnnamedPatternCheck.java index ca5c56cc5cb..17c27fd1f75 100644 --- a/java-checks/src/main/java/org/sonar/java/checks/ReplaceUnusedExceptionParameterWithUnnamedPatternCheck.java +++ b/java-checks/src/main/java/org/sonar/java/checks/ReplaceUnusedExceptionParameterWithUnnamedPatternCheck.java @@ -43,7 +43,8 @@ public void visitNode(Tree tree) { VariableTree v = catchTree.parameter(); IdentifierTree ident = v.simpleName(); - if (!ident.isUnnamedVariable() && v.symbol().usages().isEmpty()) { + // completely ignored for an absent semantic model + if (!ident.isUnnamedVariable() && context.getSemanticModel() != null && v.symbol().usages().isEmpty()) { QuickFixHelper.newIssue(context) .forRule(this) .onTree(ident) diff --git a/java-checks/src/test/java/org/sonar/java/checks/ReplaceUnusedExceptionParameterWithUnnamedPatternCheckTest.java b/java-checks/src/test/java/org/sonar/java/checks/ReplaceUnusedExceptionParameterWithUnnamedPatternCheckTest.java index 07e3d738d8e..dbfa49afe22 100644 --- a/java-checks/src/test/java/org/sonar/java/checks/ReplaceUnusedExceptionParameterWithUnnamedPatternCheckTest.java +++ b/java-checks/src/test/java/org/sonar/java/checks/ReplaceUnusedExceptionParameterWithUnnamedPatternCheckTest.java @@ -48,7 +48,7 @@ void test_without_semantics() { .withCheck(new ReplaceUnusedExceptionParameterWithUnnamedPatternCheck()) .withoutSemantic() .withJavaVersion(22) - .verifyIssues(); + .verifyNoIssues(); } }