报告 ProcessCanceledExceptionCancellationException 处理不正确的情况。

不得以任何方式捕获、吞下、记录或处理 ProcessCanceledException 及其继承者。 相反,必须将其重新抛出,以便 IntelliJ 平台基础架构能够对其进行正确处理。

在协程上下文中不得以任何方式捕获、吞下、记录或处理 CancellationException。 相反,必须将其重新抛出,以便协程基础架构能够对其进行正确处理。

检查会报告显式的 ProcessCanceledException(包括继承者)和 CancellationException 的捕获,以及对覆盖取消异常的 RuntimeExceptionExceptionThrowable 的捕获。

示例:

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 最新变化