codemodder-java
codemodder-java copied to clipboard
Codemod `sonar:java/replace-stream-collectors-to-list-s6204` may break code
Despite the recommendation from the associated sonar rule to replace:
List<Integer> numbers = someStream.collect(Collectors.toList());
List<Integer> numbers = someStream.toList();
These are not the same. The second one results in a guaranteed unmodifiable list while the first one doesn't guarantee anything but the current implementation return a modifiable list.
In fact, this kind of change breaks our own code. See PR #348.
Do you have a suggestion for what to do about it?
Trying to detect if the List is mutated seems like folly, since even in our own code's example, the mutation happens after the List is returned from the function its in.
Do you have a suggestion for what to do about it?
Trying to detect if the
Listis mutated seems like folly, since even in our own code's example, the mutation happens after theListis returned from the function its in.
I don't think there is any other simple solution other than that. Other than outright disable this, we could mark this as merge after review and warn them in the docs about possible breakage like this.