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() を使用する必要があります。
詳細は、IntelliJ プラットフォームのプラグイン SDK ドキュメントの「バックグラウンドプロセスのキャンセル」を参照してください。
2023.1 の新機能です