Skip to content

Conversation

@stefanodallapalma
Copy link
Contributor

Overview

Replaces generic catch(Exception) blocks with specific exception types that are actually thrown within the try block. This improves exception handling precision and code maintainability by catching only the exceptions that can actually occur.

What's your motivation?

Generic exception catching with catch(Exception e) is considered a code smell (SonarQube rule S2221, CWE-396) because it masks specific error conditions and makes debugging harder. When developers write code that throws specific exceptions like IOException or SQLException, the catch blocks should reflect that specificity rather than using the overly broad Exception type.

What it detects

  • Generic catch(Exception e) blocks in try-catch statements
  • Analyzes method calls and constructor invocations within try blocks to identify thrown exception types
  • Generates appropriate single-catch or multi-catch syntax for those thrown exception types if not already caught by more specific catch clauses

Before:

try {
    Files.readAllLines(path);
    connection.createStatement().executeQuery(sql);
} catch (Exception e) {
    log.error("Operation failed", e);
}

After:

try {
    Files.readAllLines(path);
    connection.createStatement().executeQuery(sql);
} catch (IOException | SQLException e) {
    log.error("Operation failed", e);
}

Anything in particular you'd like reviewers to focus on?

Implementation approach

  • Exact matching: The recipe specifically targets java.lang.Exception catches (not subclasses like RuntimeException) to be conservative about what constitutes "generic" exception handling
  • Multi-catch generation: Uses JavaTemplate with complete try-catch syntax to properly parse multi-catch expressions with | separators
  • Recipe name: feel free to suggest more suitable names

Limitations

  • Static analysis only: Relies on method/constructor signatures for thrown exceptions; doesn't perform data flow analysis for dynamically thrown exceptions
  • Checked exceptions focus: Primarily improves handling of checked exceptions since those must be declared in method signatures

Anyone you would like to review specifically?

@timtebeek

Checklist

@github-project-automation github-project-automation bot moved this to In Progress in OpenRewrite Jun 21, 2025
stefanodallapalma and others added 2 commits June 21, 2025 23:48
…eptionCatches.java

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
…eptionCatchesTest.java

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
stefanodallapalma and others added 2 commits June 21, 2025 23:50
Applied suggestions

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
@timtebeek timtebeek moved this from In Progress to Ready to Review in OpenRewrite Jun 24, 2025
@timtebeek timtebeek self-requested a review June 24, 2025 12:25
@greg-at-moderne
Copy link
Contributor

Thanks for the great contribution.
I am looking into you test cases and am wondering what the behavior should be for:

                      try {
                          new MockThrowingClass().throwsBothIOAndSQL();
                      } catch (IOException | Exception e) {
                          System.out.println("Caught: " + e.getMessage());
                      }

@stefanodallapalma
Copy link
Contributor Author

stefanodallapalma commented Jul 1, 2025

Hey @greg-at-moderne

That's an interesting case! My take is that Exception should ideally be replaced by SQLException for better specificity. However, directly using catch (IOException | Exception e) isn't possible because IOException and Exception are not disjoint types. The compiler will flag this as an error since IOException is a subclass of Exception.

@stefanodallapalma
Copy link
Contributor Author

Hi @timtebeek and @greg-at-moderne, since there hasn't been any recent activity on this PR, do you have a timeline for merging and releasing this recipe? While I can use it as a standalone recipe in our organization's project, it would be great to have it available out-of-the-box from rewrite-static-analysis.

@timtebeek
Copy link
Member

hi @stefanodallapalma ; thanks for the help! For a bit of context: Greg is out in Denmark enjoying his holiday, while I was out in Luxembourg enjoying mine, so it's taking us a little longer to get through everything. 😅

I'll try to fit this in when I can, but hard to say exactly when that'll be. Know that the work is appreciated though! Reviews are just taking a little longer over the summer.

@stefanodallapalma
Copy link
Contributor Author

stefanodallapalma commented Jul 18, 2025

@timtebeek I see. I didn't mean to be pushy, just wanted to check in. Take your time! 😊

@timtebeek
Copy link
Member

@timtebeek I see. I didn't mean to be pushy, just wanted to check in. Take your time! 😊

No worries at all; the context is just to let you know we strive to get things in quickly where we can, but life at times gets in the way. :)

@timtebeek timtebeek changed the title (RSPEC-S2221) SpecifyGenericExceptionCatches recipe Add SpecifyGenericExceptionCatches recipe to address RSPEC-S2221 Jul 18, 2025
@timtebeek timtebeek changed the title Add SpecifyGenericExceptionCatches recipe to address RSPEC-S2221 Add OnlyCatchDeclaredExceptions recipe to address RSPEC-S2221 Jul 19, 2025
@timtebeek
Copy link
Member

Seeing somewhat debatable results for let's say:

diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/checkout/JGitCheckOutCommand.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/checkout/JGitCheckOutCommand.java
index 2c745ff..8558d2b 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/checkout/JGitCheckOutCommand.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/checkout/JGitCheckOutCommand.java
@@ -19,6 +19,7 @@ org.openrewrite.staticanalysis.OnlyCatchDeclaredExceptions
 package org.apache.maven.scm.provider.git.jgit.command.checkout;
 
 import java.io.File;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
@@ -205,7 +206,7 @@
             logger.debug("current branch: " + git.getRepository().getBranch());
 
             return new CheckOutScmResult("checkout via JGit", listedFiles);
-        } catch (Exception e) {
+        } catch (AmbiguousObjectException | CanceledException | CheckoutConflictException | CorruptObjectException | GitAPIException | IOException | IncorrectObjectTypeException | InvalidConfigurationException | InvalidRefNameException | InvalidRemoteException | MissingObjectException | NoHeadException | RefAlreadyExistsException | RefNotAdvertisedException | RefNotFoundException | RevisionSyntaxException | ScmException | TransportException | WrongRepositoryStateException e) {
             throw new ScmException("JGit checkout failure!", e);
         } finally {
             JGitUtils.closeRepo(git);

But given that we're not including this recipe by default anywhere (yet) I think that's fine for now; folks can run this when they want these results.

Copy link
Member

@timtebeek timtebeek left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks a lot for the initiative here @stefanodallapalma ! Hope you agree with the changes I've made to mostly keep the logic the same (not removing catch blocks) and opting to focus on declared exceptions.

@timtebeek timtebeek merged commit 12283cf into openrewrite:main Jul 19, 2025
2 checks passed
@github-project-automation github-project-automation bot moved this from Ready to Review to Done in OpenRewrite Jul 19, 2025
@stefanodallapalma
Copy link
Contributor Author

Seeing somewhat debatable results for let's say:

diff --git a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/checkout/JGitCheckOutCommand.java b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/checkout/JGitCheckOutCommand.java
index 2c745ff..8558d2b 100644
--- a/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/checkout/JGitCheckOutCommand.java
+++ b/maven-scm-providers/maven-scm-providers-git/maven-scm-provider-jgit/src/main/java/org/apache/maven/scm/provider/git/jgit/command/checkout/JGitCheckOutCommand.java
@@ -19,6 +19,7 @@ org.openrewrite.staticanalysis.OnlyCatchDeclaredExceptions
 package org.apache.maven.scm.provider.git.jgit.command.checkout;
 
 import java.io.File;
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
@@ -205,7 +206,7 @@
             logger.debug("current branch: " + git.getRepository().getBranch());
 
             return new CheckOutScmResult("checkout via JGit", listedFiles);
-        } catch (Exception e) {
+        } catch (AmbiguousObjectException | CanceledException | CheckoutConflictException | CorruptObjectException | GitAPIException | IOException | IncorrectObjectTypeException | InvalidConfigurationException | InvalidRefNameException | InvalidRemoteException | MissingObjectException | NoHeadException | RefAlreadyExistsException | RefNotAdvertisedException | RefNotFoundException | RevisionSyntaxException | ScmException | TransportException | WrongRepositoryStateException e) {
             throw new ScmException("JGit checkout failure!", e);
         } finally {
             JGitUtils.closeRepo(git);

But given that we're not including this recipe by default anywhere (yet) I think that's fine for now; folks can run this when they want these results.

I see this is an interesting edge case, and I'm not surprised given that the try block in that method spans ~100 lines of code. I can see both sides here: on one hand, you could argue for ignoring the specific thrown types since a custom ScmException is being rethrown anyway. On the other hand, when working in a complex codebase, I'd see this as an opportunity to refactor that block instead.
I think it really depends on the specific use case, and I agree it's fine for now. This is the kind of recipe that people (myself included) would run selectively.

@stefanodallapalma
Copy link
Contributor Author

Thanks a lot for the initiative here @stefanodallapalma ! Hope you agree with the changes I've made to mostly keep the logic the same (not removing catch blocks) and opting to focus on declared exceptions.

Thanks for all the enhancements, Tim! I really appreciate them as they continue to teach me how to best use the OpenRewrite AST constructs.

mergify bot added a commit to robfrank/linklift that referenced this pull request Aug 15, 2025
… 2.11.0 to 2.15.0 [skip ci]

Bumps [org.openrewrite.recipe:rewrite-static-analysis](https://github.com/openrewrite/rewrite-static-analysis) from 2.11.0 to 2.15.0.
Release notes

*Sourced from [org.openrewrite.recipe:rewrite-static-analysis's releases](https://github.com/openrewrite/rewrite-static-analysis/releases).*

> 2.15.0
> ------
>
> What's Changed
> --------------
>
> * Add parentheses in `CompareEnumsWithEqualityOperator` as needed by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-static-analysis#658](https://github.com/openrewrite/rewrite-static-analysis/pull/658)
> * Recipe to simplify Boolean expressions using De Morgan's laws by [`@​greg-at-moderne`](https://github.com/greg-at-moderne) in [openrewrite/rewrite-static-analysis#659](https://github.com/openrewrite/rewrite-static-analysis/pull/659)
> * SimplifyBooleanExpressionWithDeMorgan - Add parens when converting to OR by [`@​greg-at-moderne`](https://github.com/greg-at-moderne) in [openrewrite/rewrite-static-analysis#660](https://github.com/openrewrite/rewrite-static-analysis/pull/660)
> * UseForEachLoop recipe by [`@​greg-at-moderne`](https://github.com/greg-at-moderne) in [openrewrite/rewrite-static-analysis#651](https://github.com/openrewrite/rewrite-static-analysis/pull/651)
> * Do not remove used private fields after type change by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-static-analysis#648](https://github.com/openrewrite/rewrite-static-analysis/pull/648)
> * UseForEachLoop - not to change in case of array assignment by [`@​greg-at-moderne`](https://github.com/greg-at-moderne) in [openrewrite/rewrite-static-analysis#661](https://github.com/openrewrite/rewrite-static-analysis/pull/661)
> * Remove UseForEachLoop by [`@​greg-at-moderne`](https://github.com/greg-at-moderne) in [openrewrite/rewrite-static-analysis#662](https://github.com/openrewrite/rewrite-static-analysis/pull/662)
> * Fixing `twoCases` test case in `MinimumSwitchCasesTest` by [`@​greg-at-moderne`](https://github.com/greg-at-moderne) in [openrewrite/rewrite-static-analysis#672](https://github.com/openrewrite/rewrite-static-analysis/pull/672)
> * Fixing code suggestions by [`@​greg-at-moderne`](https://github.com/greg-at-moderne) in [openrewrite/rewrite-static-analysis#673](https://github.com/openrewrite/rewrite-static-analysis/pull/673)
> * Keep indentation when running `FinalizePrivateFields` by [`@​jevanlingen`](https://github.com/jevanlingen) in [openrewrite/rewrite-static-analysis#675](https://github.com/openrewrite/rewrite-static-analysis/pull/675)
> * PreferIncrementOperator by [`@​greg-at-moderne`](https://github.com/greg-at-moderne) in [openrewrite/rewrite-static-analysis#676](https://github.com/openrewrite/rewrite-static-analysis/pull/676)
> * Add MavenJavadocNonAsciiRecipe to remove non-ASCII characters from Ja… by [`@​sfarhaazmi`](https://github.com/sfarhaazmi) in [openrewrite/rewrite-static-analysis#674](https://github.com/openrewrite/rewrite-static-analysis/pull/674)
> * refactor: Static imports for Collections and Collectors by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-static-analysis#678](https://github.com/openrewrite/rewrite-static-analysis/pull/678)
> * PreferIncrementOperator - more coverage - compound assignment operators by [`@​greg-at-moderne`](https://github.com/greg-at-moderne) in [openrewrite/rewrite-static-analysis#680](https://github.com/openrewrite/rewrite-static-analysis/pull/680)
> * rename settings.local.json to settings.json by [`@​zieka`](https://github.com/zieka) in [openrewrite/rewrite-static-analysis#690](https://github.com/openrewrite/rewrite-static-analysis/pull/690)
> * Add PreferEqualityComparisonOverDifferenceCheck recipe by [`@​e5LA`](https://github.com/e5LA) in [openrewrite/rewrite-static-analysis#686](https://github.com/openrewrite/rewrite-static-analysis/pull/686)
> * Applying code suggestions by [`@​greg-at-moderne`](https://github.com/greg-at-moderne) in [openrewrite/rewrite-static-analysis#693](https://github.com/openrewrite/rewrite-static-analysis/pull/693)
> * Show a failure to remove some semicolons still by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-static-analysis#697](https://github.com/openrewrite/rewrite-static-analysis/pull/697)
> * `MoveConditionsToWhile` recipe by [`@​greg-at-moderne`](https://github.com/greg-at-moderne) in [openrewrite/rewrite-static-analysis#698](https://github.com/openrewrite/rewrite-static-analysis/pull/698)
> * Add Claude derived instructions for tests and recipes by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-static-analysis#700](https://github.com/openrewrite/rewrite-static-analysis/pull/700)
> * Fix NPE for new arrays with initializers in `ReplaceCollectionToArrayArgWithEmptyArray` by [`@​greg-at-moderne`](https://github.com/greg-at-moderne) in [openrewrite/rewrite-static-analysis#704](https://github.com/openrewrite/rewrite-static-analysis/pull/704)
> * Add `RemoveRedundantNullCheckBeforeLiteralEquals` by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-static-analysis#706](https://github.com/openrewrite/rewrite-static-analysis/pull/706)
> * Refactor RewriteTest to use defaults method by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-static-analysis#707](https://github.com/openrewrite/rewrite-static-analysis/pull/707)
>
> New Contributors
> ----------------
>
> * [`@​sfarhaazmi`](https://github.com/sfarhaazmi) made their first contribution in [openrewrite/rewrite-static-analysis#674](https://github.com/openrewrite/rewrite-static-analysis/pull/674)
> * [`@​zieka`](https://github.com/zieka) made their first contribution in [openrewrite/rewrite-static-analysis#690](https://github.com/openrewrite/rewrite-static-analysis/pull/690)
> * [`@​e5LA`](https://github.com/e5LA) made their first contribution in [openrewrite/rewrite-static-analysis#686](https://github.com/openrewrite/rewrite-static-analysis/pull/686)
>
> **Full Changelog**: <openrewrite/rewrite-static-analysis@v2.14.0...v2.15.0>
>
> 2.14.0
> ------
>
> What's Changed
> --------------
>
> * Heap size of 1G for tests by [`@​greg-at-moderne`](https://github.com/greg-at-moderne) in [openrewrite/rewrite-static-analysis#653](https://github.com/openrewrite/rewrite-static-analysis/pull/653)
> * UnwrapElseAfterReturn - dealing with trailing comments by [`@​greg-at-moderne`](https://github.com/greg-at-moderne) in [openrewrite/rewrite-static-analysis#654](https://github.com/openrewrite/rewrite-static-analysis/pull/654)
> * Dealing with even more kinds of trailing comments in UnwrapElseAfterReturn by [`@​greg-at-moderne`](https://github.com/greg-at-moderne) in [openrewrite/rewrite-static-analysis#655](https://github.com/openrewrite/rewrite-static-analysis/pull/655)
>
> **Full Changelog**: <openrewrite/rewrite-static-analysis@v2.13.0...v2.14.0>
>
> 2.13.0
> ------
>
> What's Changed
> --------------
>
> * Add CollectionToArrayShouldHaveProperType recipe (RSPEC-S3020) by [`@​jkschneider`](https://github.com/jkschneider) in [openrewrite/rewrite-static-analysis#635](https://github.com/openrewrite/rewrite-static-analysis/pull/635)
> * Fix `UnnecessaryCatch` Recipe Multi-Catch Handling by [`@​stefanodallapalma`](https://github.com/stefanodallapalma) in [openrewrite/rewrite-static-analysis#638](https://github.com/openrewrite/rewrite-static-analysis/pull/638)
> * Add `OnlyCatchDeclaredExceptions` recipe to address RSPEC-S2221 by [`@​stefanodallapalma`](https://github.com/stefanodallapalma) in [openrewrite/rewrite-static-analysis#601](https://github.com/openrewrite/rewrite-static-analysis/pull/601)
> * RemoveRedundantTypeCast should not remove required downcast by [`@​protocol7`](https://github.com/protocol7) in [openrewrite/rewrite-static-analysis#495](https://github.com/openrewrite/rewrite-static-analysis/pull/495)
> * Unwrap else after return in preceding `if` by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-static-analysis#645](https://github.com/openrewrite/rewrite-static-analysis/pull/645)
> * Extend `InlineVariable` to support local variable assignments by [`@​timtebeek`](https://github.com/timtebeek) in [openrewrite/rewrite-static-analysis#647](https://github.com/openrewrite/rewrite-static-analysis/pull/647)

... (truncated)


Commits

* [`e5ca752`](openrewrite/rewrite-static-analysis@e5ca752) OpenRewrite recipe best practices
* [`976d366`](openrewrite/rewrite-static-analysis@976d366) Retain `writeReplace` in `RemoveUnusedPrivateMethods`
* [`76322bc`](openrewrite/rewrite-static-analysis@76322bc) Refactor RewriteTest to use defaults method ([#707](https://github.com/openrewrite/rewrite-static-analysis/issues/707))
* [`e5926ef`](openrewrite/rewrite-static-analysis@e5926ef) Add `RemoveRedundantNullCheckBeforeLiteralEquals` ([#706](https://github.com/openrewrite/rewrite-static-analysis/issues/706))
* [`6547c82`](openrewrite/rewrite-static-analysis@6547c82) OpenRewrite recipe best practices
* [`c4c5941`](openrewrite/rewrite-static-analysis@c4c5941) Fix NPE for new arrays with initializers in `ReplaceCollectionToArrayArgWithE...
* [`428d8b0`](openrewrite/rewrite-static-analysis@428d8b0) Add Claude derived instructions for tests and recipes ([#700](https://github.com/openrewrite/rewrite-static-analysis/issues/700))
* [`e775b10`](openrewrite/rewrite-static-analysis@e775b10) Polish `MoveConditionsToWhile`
* [`dbabed5`](openrewrite/rewrite-static-analysis@dbabed5) `MoveConditionsToWhile` recipe ([#698](https://github.com/openrewrite/rewrite-static-analysis/issues/698))
* [`a5a709c`](openrewrite/rewrite-static-analysis@a5a709c) Show a failure to remove some semicolons still ([#697](https://github.com/openrewrite/rewrite-static-analysis/issues/697))
* Additional commits viewable in [compare view](openrewrite/rewrite-static-analysis@v2.11.0...v2.15.0)
  
[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility\_score?dependency-name=org.openrewrite.recipe:rewrite-static-analysis&package-manager=maven&previous-version=2.11.0&new-version=2.15.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.
[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)
---
Dependabot commands and options
  
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot show  ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

3 participants