Inspectopedia Help

Cancellation check in loops

Reports forEach loops with missing cancellation checks.

Runs only within the methods with com.intellij.util.concurrency.annotations.RequiresReadLock annotation.

Example:

for (item in items) { ProgressManager.checkCanceled() // should be present in the first line ... }

In case of nested loops with nothing in between:

for (item in items) { // nothing in between for (inner in item.inners) { ProgressManager.checkCanceled() // should be present in the first line of the inner loop only ... } }

In blocking context com.intellij.openapi.progress.ProgressManager#checkCanceled should be used, while com.intellij.openapi.progress.CoroutinesKt#checkCancelled should be used in suspending one.

See Background Processes and ProcessCanceledException in IntelliJ Platform Plugin SDK docs for more details.

New in 2023.1

Inspection Details

Available in:

IntelliJ IDEA 2023.3, Qodana for JVM 2023.3

Plugin:

Plugin DevKit, 233.SNAPSHOT

Last modified: 13 July 2023