From 2bd33d2dc8d5de7421950843d4ff4f9c73dd6de4 Mon Sep 17 00:00:00 2001 From: Laurent Redor Date: Tue, 28 Oct 2025 18:04:26 +0100 Subject: [PATCH] Ignore `java.util.Iterator` in NoGuavaSetsNewHashSet recipe Before this commit, `java.lang.Iterable` was ignored to avoid generating broken code. This commit adds `java.util.Iterator` to the ignore list for the same reason. A corresponding test has also been added. --- .../migrate/guava/NoGuavaSetsNewHashSet.java | 4 ++-- .../guava/NoGuavaSetsNewHashSetTest.java | 22 +++++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/openrewrite/java/migrate/guava/NoGuavaSetsNewHashSet.java b/src/main/java/org/openrewrite/java/migrate/guava/NoGuavaSetsNewHashSet.java index 7938c1b3eb..81557f9509 100644 --- a/src/main/java/org/openrewrite/java/migrate/guava/NoGuavaSetsNewHashSet.java +++ b/src/main/java/org/openrewrite/java/migrate/guava/NoGuavaSetsNewHashSet.java @@ -75,8 +75,8 @@ public J visitMethodInvocation(J.MethodInvocation method, ExecutionContext ctx) .build() .apply(getCursor(), method.getCoordinates().replace(), method.getArguments().get(0)); } - // Skip Iterable-only cases to avoid generating broken code - if (TypeUtils.isAssignableTo("java.lang.Iterable", method.getArguments().get(0).getType())) { + // Skip Iterable-only and Iterator-only cases to avoid generating broken code + if (TypeUtils.isAssignableTo("java.lang.Iterable", method.getArguments().get(0).getType()) || TypeUtils.isAssignableTo("java.util.Iterator", method.getArguments().get(0).getType())) { return method; } } diff --git a/src/test/java/org/openrewrite/java/migrate/guava/NoGuavaSetsNewHashSetTest.java b/src/test/java/org/openrewrite/java/migrate/guava/NoGuavaSetsNewHashSetTest.java index 99f8b21294..aa107baab4 100644 --- a/src/test/java/org/openrewrite/java/migrate/guava/NoGuavaSetsNewHashSetTest.java +++ b/src/test/java/org/openrewrite/java/migrate/guava/NoGuavaSetsNewHashSetTest.java @@ -143,6 +143,28 @@ void test() { ); } + @Test + void setsNewHashSetWithIteratorsFilter() { + //language=java + rewriteRun( + java( + """ + import java.util.Collection; + import java.util.Iterator; + + import com.google.common.collect.Iterators; + import com.google.common.collect.Sets; + + class Test { + public Collection collectExistingRepresentations(Iterator iterator) { + return Sets.newHashSet(Iterators.filter(iterator, String.class)); + } + } + """ + ) + ); + } + @Test void setsNewHashSetWithCustomIterable() { //language=java