Skip to content

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

Description

@andrecsilva

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.

Activity

  1. nahsra commented on Apr 18, 2024

    @nahsra
    Contributor

    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.

  2. andrecsilva commented on Apr 18, 2024

    @andrecsilva
    ContributorAuthor

    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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions