ループ、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 の新機能です