diff --git a/src/main/java/org/openrewrite/java/migrate/guava/NoGuavaPredicate.java b/src/main/java/org/openrewrite/java/migrate/guava/NoGuavaPredicate.java index b9db662b39..c5b2f77ac9 100644 --- a/src/main/java/org/openrewrite/java/migrate/guava/NoGuavaPredicate.java +++ b/src/main/java/org/openrewrite/java/migrate/guava/NoGuavaPredicate.java @@ -15,10 +15,8 @@ */ package org.openrewrite.java.migrate.guava; -import org.openrewrite.ExecutionContext; -import org.openrewrite.Preconditions; -import org.openrewrite.Recipe; -import org.openrewrite.TreeVisitor; +import org.openrewrite.*; +import org.openrewrite.java.ChangeMethodName; import org.openrewrite.java.ChangeType; import org.openrewrite.java.JavaIsoVisitor; import org.openrewrite.java.MethodMatcher; @@ -42,11 +40,23 @@ public String getDescription() { public TreeVisitor getVisitor() { return Preconditions.check( Preconditions.not(new UsesPredicateMethod<>()), - new ChangeType( - "com.google.common.base.Predicate", - "java.util.function.Predicate", - false) - .getVisitor() + new TreeVisitor() { + @Override + public Tree preVisit(Tree tree, ExecutionContext ctx) { + Tree t = tree; + t = new ChangeMethodName( + "com.google.common.base.Predicate apply(..)", + "test", + true, + false + ).getVisitor().visitNonNull(t, ctx, getCursor().getParentOrThrow()); + return new ChangeType( + "com.google.common.base.Predicate", + "java.util.function.Predicate", + false + ).getVisitor().visitNonNull(t, ctx, getCursor().getParentOrThrow()); + } + } ); } diff --git a/src/main/resources/META-INF/rewrite/no-guava.yml b/src/main/resources/META-INF/rewrite/no-guava.yml index aac89c1601..59ed8c81a9 100644 --- a/src/main/resources/META-INF/rewrite/no-guava.yml +++ b/src/main/resources/META-INF/rewrite/no-guava.yml @@ -184,11 +184,6 @@ recipeList: - org.openrewrite.java.ChangeMethodTargetToStatic: methodPattern: com.google.common.base.Predicates not(com.google.common.base.Predicate) fullyQualifiedTargetTypeName: java.util.function.Predicate - - - org.openrewrite.java.ChangeMethodName: - methodPattern: com.google.common.base.Predicate apply(..) - newMethodName: test - matchOverrides: true - org.openrewrite.java.migrate.guava.NoGuavaPredicate --- diff --git a/src/test/java/org/openrewrite/java/migrate/guava/NoGuavaPredicateTest.java b/src/test/java/org/openrewrite/java/migrate/guava/NoGuavaPredicateTest.java index c359d3e586..4b78af2b8d 100644 --- a/src/test/java/org/openrewrite/java/migrate/guava/NoGuavaPredicateTest.java +++ b/src/test/java/org/openrewrite/java/migrate/guava/NoGuavaPredicateTest.java @@ -183,7 +183,11 @@ void doNotChangeWhenUsingCollectionsFilter() { import java.util.Collection; class Test { - Predicate notEmpty = s -> !s.isEmpty(); + Predicate notEmpty = new Predicate() { + @Override public boolean apply(String s) { + return !s.isEmpty(); + } + }; public Collection filterCollection(Collection input) { return Collections2.filter(input, notEmpty); diff --git a/src/test/java/org/openrewrite/java/migrate/guava/PreferJavaUtilPredicateTest.java b/src/test/java/org/openrewrite/java/migrate/guava/PreferJavaUtilPredicateTest.java index 43f5ef4685..f7ca18f036 100644 --- a/src/test/java/org/openrewrite/java/migrate/guava/PreferJavaUtilPredicateTest.java +++ b/src/test/java/org/openrewrite/java/migrate/guava/PreferJavaUtilPredicateTest.java @@ -18,6 +18,7 @@ import org.junit.jupiter.api.Test; import org.openrewrite.DocumentExample; import org.openrewrite.InMemoryExecutionContext; +import org.openrewrite.Issue; import org.openrewrite.java.JavaParser; import org.openrewrite.test.RecipeSpec; import org.openrewrite.test.RewriteTest; @@ -100,4 +101,32 @@ public static Predicate notEmptyPredicate() { ) ); } + + @Issue("https://github.com/openrewrite/rewrite-migrate-java/issues/899") + @Test + void doNotChangeWhenUsingCollectionsFilter() { + // Collections2.filter requires Guava Predicate as last parameter + rewriteRun( + //language=java + java( + """ + import com.google.common.base.Predicate; + import com.google.common.collect.Collections2; + import java.util.Collection; + + class Test { + Predicate notEmpty = new Predicate() { + @Override public boolean apply(String s) { + return !s.isEmpty(); + } + }; + + public Collection filterCollection(Collection input) { + return Collections2.filter(input, notEmpty); + } + } + """ + ) + ); + } }