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 rule is classified as:
|
You can look at examples of errors detected by the V6053 diagnostic. |
Was this page helpful?
Your message has been sent. We will email you at
If you do not see the email in your inbox, please check if it is filtered to one of the following folders: