Inspectopedia Help

Cancellation check in loops

Reports loops, forEach-like methods, and ContainerUtil.process() with missing cancellation checks.

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

Example:

@RequiresReadLock fun doSomething() { ... for (item in items) { ProgressManager.checkCanceled() // should be present in the first line ... } items.forEach { ProgressManager.checkCanceled() // should be present in the first line ... } ... }

In the case of nested loops with nothing in between:

@RequiresReadLock fun doSomething() { ... 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

By default bundled with:

IntelliJ IDEA 2024.1, Qodana for JVM 2024.1,

Can be installed with plugin:

Plugin DevKit, 241.16690

Last modified: 29 April 2024