The analyzer has detected a collection that gets modified while being iterated, although it was not designed for concurrent modification. This may raise a 'ConcurrentModificationException'.
Consider several examples of faulty code.
Example 1:
List<Integer> mylist = new ArrayList<>(); .... for (Integer i : mylist) { if (cond) { mylist.add(i * 2); } }
Example 2:
List<Integer> myList = new ArrayList<>(); .... Iterator iter = myList.iterator(); while (iter.hasNext()) { if (cond) { Integer i = (Integer) iter.next(); myList.add(i * 2); } }
Example 3:
Set<Integer> mySet = new HashSet<>(); .... mySet.stream().forEach(i -> mySet.add(i * 2));
However, the analyser will keep silent if a collection permits concurrent modification:
List<Integer> mylist = new CopyOnWriteArrayList<>(); .... for (Integer i : mylist) { if (cond) { mylist.add(i + 1); } }
It will also keep silent if the loop terminates immediately after the collection is modified:
List<Integer> mylist = new ArrayList<>(); .... for (Integer i : mylist) { if (cond) { mylist.add(i + 1); break; } }
This diagnostic is classified as:
|
You can look at examples of errors detected by the V6053 diagnostic. |