Reports loops whose second and all subsequent iterations do not produce any additional side effects other than the one produced by the first iteration, which can indicate a programming error.

Such loops may iterate only zero, one, or infinite number of times. If the infinite number of times case is unreachable, such a loop can be replaced with an if statement. Otherwise, there's a possibility that the program can get stuck.

Example:


    public void foo(String baseName, String names) {
        int suffix = 1;
        String name = baseName;
        while (names.contains(name)) {
            // error: suffix is not updated making loop body idempotent
            name = baseName + suffix;
        }
    }

New in 2018.1