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.
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