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 Cancellation in IntelliJ Platform Plugin SDK docs for more details.
- By ID
Can be used to locate inspection in e.g. Qodana configuration files, where you can quickly enable or disable it, or adjust its settings.
CancellationCheckInLoops
New in 2023.1
Inspection Details | |
---|---|
By default bundled with: | |
Can be installed with plugin: | Plugin DevKit, 243.23126 |
Thanks for your feedback!