Skip to content

Conversation

@lredor
Copy link
Contributor

@lredor lredor commented Oct 24, 2025

What's changed?

Anything in particular you'd like reviewers to focus on?

First contributions, so I’m not sure I’ve mastered all aspects of OpenRewrite yet.

Anyone you would like to review specifically?

@timtebeek

Checklist

  • I've added unit tests to cover both positive and negative cases
  • I've read and applied the recipe conventions and best practices
  • I've used the IntelliJ IDEA auto-formatter on affected files

Copy link
Member

@timtebeek timtebeek left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great to see! Some concern with the approach taken here, as we strive to do no harm. As much as it'll likely mostly be what folks want, we can't be certain they don't rely on the old window-like behavior when applying changes.

maybeRemoveImport("com.google.common.collect.Collections2");
maybeAddImport("java.util.function.Predicate");

return JavaTemplate.builder("#{any(java.util.Collection)}.stream().filter(#{any(java.util.function.Predicate)}).toList()")
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure these are as interchangeable ; Collections2.filter returns a com.google.common.collect.Collections2.FilteredCollection which acts as a view on the underlying collection, whereas .toList() returns a fully new collection with very different performance and semantics when adding/removing entries. Any thoughts there?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You’re certainly right (about the performance), but the current Guava recipes cause compilation errors, as explained in the description of issue #899.
To respect the “do no harm” principle, one option might be to conditionally replace com.google.common.base.Predicate with java.util.function.Predicate.
However, this seems a bit more complex — probably too complex for me at this stage.

I probably thought a bit too quickly when creating my latest issues and PRs, aiming to eliminate all compilation errors and remove any remaining Guava dependencies.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes understandable that you're looking for either a more complete migration off of Guava (with no compilation issues), or a more cautious move off of Guava's Predicate onto Java's Predicate. We have something similar when choosing to move off of more specific Collections methods onto their interfaces, as seen in this recipe:
https://github.com/openrewrite/rewrite-static-analysis/blob/da756464470f9c5dbc056fa2e008123d73a50e05/src/main/java/org/openrewrite/staticanalysis/UseCollectionInterfaces.java#L277-L297

Perhaps good to also/instead add similar handling before we change Predicate: look how it's used, and only make changes when safe to do so.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Either way appreciate the help both in developing recipes, and thinking through the options. 🙏🏻

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

Labels

guava recipe Recipe requested

Projects

Archived in project

Development

Successfully merging this pull request may close these issues.

2 participants