forEach などのメソッド、欠落しているキャンセルのチェックがある ContainerUtil.process() を報告します。
com.intellij.util.concurrency.annotations.RequiresReadLock アノテーション付きのメソッド内でのみ実行されます。
例:
@RequiresReadLock
fun doSomething() {
...
for (item in items) {
ProgressManager.checkCanceled() // 先頭行に存在する必要があります
...
}
items.forEach {
ProgressManager.checkCanceled() // 先頭行に存在する必要があります
...
}
...
}
複数のネストしたループ間に何もない場合:
@RequiresReadLock
fun doSomething() {
...
for (item in items) {
// 間に何もない
for (inner in item.inners) {
ProgressManager.checkCanceled() // 内側のループの先頭行のみに存在する必要があります
...
}
}
...
}
ブロッキングコンテキストでは com.intellij.openapi.progress.ProgressManager.checkCanceled() を使用する必要がありますが、中断コンテキストでは com.intellij.openapi.progress.CoroutinesKt.checkCancelled() を使用する必要があります。
See Background Processes Cancellation in IntelliJ Platform Plugin SDK docs for more details.
2023.1 の新機能です