Reports list.remove(index) calls inside an ascending counted loop.

This is suspicious as the list becomes shorter after the removal, and the next element gets skipped. A simple fix is to decrease the index variable after the removal, but probably removing via an iterator or using the removeIf() method (Java 8 and later) is a more robust alternative. If you don't expect that remove() will be called more than once in a loop, consider adding a break after it.

Example:

  public static void main(String[] args) {
    process(new ArrayList<>(
      Arrays.asList("1", "2", "|", "3", "4")));
  }

  static void process(List<String> list) {
    for (int i = 0; i < list.size(); i++) {
      if (list.get(i).equals("|")) {
        list.remove(i);
        continue;
      }
      System.out.println(list.get(i));
    }
  }

The code looks like 1 2 3 4 is going to be printed, but in reality, 3 will be skipped in the output.

New in 2018.2