Reports ProcessCanceledException and CancellationException handled incorrectly.

ProcessCanceledException and its inheritors must not be caught, swallowed, logged, or handled in any way. Instead, it must be rethrown so that the IntelliJ Platform infrastructure can handle it correctly.

CancellationException must not be caught, swallowed, logged, or handled in any way in coroutine context. Instead, it must be rethrown so that the coroutines infrastructure can handle it correctly.

Inspection reports both explicit ProcessCanceledException (including inheritors) and CancellationExceptioncatching, as well as catching RuntimeException, Exception and Throwable covering cancellation exceptions.

Examples:

ProcessCanceledException:


// bad:
try {
  // ...
} catch (ProcessCanceledException e) { // exception should not be swallowed
}

// bad:
try {
  // ...
} catch (ProcessCanceledException e) {
  LOG.error("Error occurred", e); // exception should not be logged
  throw e;
}


// good:
try {
  // ...
} catch (ProcessCanceledException e) {
  // additional actions
  throw e;
}

CancellationException:


// bad:
cs.launch {
  try {
    // ...
  } catch (e: CancellationException) { // exception should not be swallowed
  }
}

// bad:
suspend fun suspendingFunction() {
  try {
    // ...
  } catch (ProcessCanceledException e) {
    LOG.error("Error occurred", e); // exception should not be logged
    throw e;
  }
}


// good:
cs.launch {
  try {
    // ...
  } catch (ProcessCanceledException e) {
    // additional actions
    throw e;
  }
}

New in 2023.2