잘못 처리된 ProcessCanceledExceptionCancellationException을 보고합니다.

ProcessCanceledException과 해당하는 상속자는 어떤 식으로든 캐칭하거나, 읽거나, 로깅하거나 처리해서는 안 됩니다. 대신 다시 던져서 IntelliJ Platform 인프라가 이를 올바른 방식으로 처리할 수 있도록 해야 합니다.

CancellationException은 코루틴 컨텍스트에서 잡거나, 읽거나, 로깅하거나, 처리해서는 안 됩니다. 대신 다시 던져서 코루틴 인프라가 이를 올바른 방식으로 처리할 수 있도록 해야 합니다.

검사가 명시적인 ProcessCanceledException(상속자 포함)과 CancellationException을 캐칭하는 경우와 더불어 취소 예외를 포함하는 RuntimeException, ExceptionThrowable을 캐칭하는 경우를 보고합니다.

예:

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) { // 예외가 읽혀서는 안 됩니다
  }
}

// bad:
suspend fun suspendingFunction() {
  try {
    // ...
  } catch (ProcessCanceledException e) {
    LOG.error("Error occurred", e); // 예외가 로깅되어서는 안 됩니다
    throw e;
  }
}


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

2023.2의 새로운 기능