Catching an exception only to immediately rethrow it without doing anything else is useless and misleading.


== Noncompliant Code Example

----
try {
  /* ... */
} catch (Exception e) {                   // Non-Compliant
  throw e;
}
----


== Exceptions

When all instances of a general exception must be handled, but some specific ones not, propagation must be used and so is allowed by this rule.


----
try {
  /* ... */
} catch (RuntimeException e) {            // Compliant - propagation of the unchecked exception
  throw e;
} catch (Exception e) {                   // Compliant - catching of the checked exception
  LOGGER.error("...", e);
}
----

Throwing the same exception can also makes sense when an action is done before throwing it again. 

----
try {
  /* ... */
} catch (MyException e) {            // Compliant - something is done before throwing again the exception
  fixSomething();
  throw e;
}
----


