ProcessCanceledException
和 CancellationException
处理不正确的情况。
不得以任何方式捕获、吞下、记录或处理 ProcessCanceledException
及其继承者。
相反,必须将其重新抛出,以便 IntelliJ 平台基础架构能够对其进行正确处理。
在协程上下文中不得以任何方式捕获、吞下、记录或处理 CancellationException
。
相反,必须将其重新抛出,以便协程基础架构能够对其进行正确处理。
检查会报告显式的 ProcessCanceledException
(包括继承者)和 CancellationException
的捕获,以及对覆盖取消异常的 RuntimeException
、Exception
和 Throwable
的捕获。
ProcessCanceledException
:
// bad:
try {
// ...
} catch (ProcessCanceledException e) { // 不应吞下异常
}
// 错误:
try {
// ...
} catch (ProcessCanceledException e) {
LOG.error("Error occurred", e); // 不应记录异常
throw e;
}
// 正确:
try {
// ...
} catch (ProcessCanceledException e) {
// 其他操作
throw e;
}
CancellationException
:
// bad:
cs.launch {
try {
// ...
} catch (e: CancellationException) { // 不应吞下异常
}
}
// 错误:
suspend fun suspendingFunction() {
try {
// ...
} catch (ProcessCanceledException e) {
LOG.error("Error occurred", e); // 不应记录异常
throw e;
}
}
// 正确:
cs.launch {
try {
// ...
} catch (ProcessCanceledException e) {
// additional actions
throw e;
}
}
2023.2 最新变化