codemodder-java icon indicating copy to clipboard operation
codemodder-java copied to clipboard

Codemod `sonar:java/replace-stream-collectors-to-list-s6204` may break code

Open andrecsilva opened this issue 1 year ago • 2 comments

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.

andrecsilva avatar Apr 15 '24 13:04 andrecsilva

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.

nahsra avatar Apr 18 '24 13:04 nahsra

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.

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.

andrecsilva avatar Apr 18 '24 13:04 andrecsilva