1919import org .openrewrite .Preconditions ;
2020import org .openrewrite .Recipe ;
2121import org .openrewrite .TreeVisitor ;
22- import org .openrewrite .java .JavaIsoVisitor ;
2322import org .openrewrite .java .JavaTemplate ;
23+ import org .openrewrite .java .JavaVisitor ;
2424import org .openrewrite .java .MethodMatcher ;
2525import org .openrewrite .java .search .UsesMethod ;
2626import org .openrewrite .java .tree .J ;
3131
3232public class NoGuavaSetsFilter extends Recipe {
3333 private static final MethodMatcher SETS_FILTER = new MethodMatcher ("com.google.common.collect.Sets filter(java.util.Set, com.google.common.base.Predicate)" );
34+ private static final MethodMatcher SETS_FILTER_SORTED_SET = new MethodMatcher ("com.google.common.collect.Sets filter(java.util.SortedSet, com.google.common.base.Predicate)" );
3435
3536 @ Override
3637 public String getDisplayName () {
@@ -49,28 +50,44 @@ public Set<String> getTags() {
4950
5051 @ Override
5152 public TreeVisitor <?, ExecutionContext > getVisitor () {
52- return Preconditions .check (
53- new UsesMethod <>( SETS_FILTER ),
54- new JavaIsoVisitor < ExecutionContext >() {
55- @ Override
56- public J . MethodInvocation visitMethodInvocation ( J . MethodInvocation method , ExecutionContext ctx ) {
57- if ( SETS_FILTER . matches ( method )) {
58- maybeRemoveImport ("com.google.common.base.Predicate " );
59- maybeRemoveImport ( "com.google.common.collect.Sets " );
60- maybeAddImport ("java.util.function.Predicate" );
61- maybeAddImport ("java.util.stream.Collectors" );
53+ TreeVisitor <?, ExecutionContext > precondition = Preconditions .or ( new UsesMethod <>( SETS_FILTER ), new UsesMethod <>( SETS_FILTER_SORTED_SET ));
54+ return Preconditions . check ( precondition , new JavaVisitor < ExecutionContext >() {
55+ @ Override
56+ public J visitMethodInvocation ( J . MethodInvocation method , ExecutionContext ctx ) {
57+ if ( SETS_FILTER_SORTED_SET . matches ( method ) ) {
58+ maybeRemoveImport ( "com.google.common.base.Predicate" );
59+ maybeRemoveImport ("com.google.common.collect.Sets " );
60+ maybeAddImport ( "java.util.TreeSet " );
61+ maybeAddImport ("java.util.function.Predicate" );
62+ maybeAddImport ("java.util.stream.Collectors" );
6263
63- return JavaTemplate .builder ("#{any(java.util.Collection)}.stream().filter(#{any(java.util.function.Predicate)}).collect(Collectors.toSet())" )
64- .imports ("java.util.stream.Collectors" )
65- .build ()
66- .apply (getCursor (),
67- method .getCoordinates ().replace (),
68- method .getArguments ().get (0 ),
69- method .getArguments ().get (1 ));
70- }
71- return super .visitMethodInvocation (method , ctx );
64+ return JavaTemplate .builder ("#{any(java.util.Collection)}.stream().filter(#{any(java.util.function.Predicate)}).collect(Collectors.toCollection(TreeSet::new))" )
65+ .imports ("java.util.TreeSet" )
66+ .imports ("java.util.stream.Collectors" )
67+ .build ()
68+ .apply (getCursor (),
69+ method .getCoordinates ().replace (),
70+ method .getArguments ().get (0 ),
71+ method .getArguments ().get (1 ));
7272 }
73+ if (SETS_FILTER .matches (method )) {
74+ maybeRemoveImport ("com.google.common.base.Predicate" );
75+ maybeRemoveImport ("com.google.common.collect.Sets" );
76+ maybeAddImport ("java.util.TreeSet" );
77+ maybeAddImport ("java.util.function.Predicate" );
78+ maybeAddImport ("java.util.stream.Collectors" );
79+
80+ return JavaTemplate .builder ("#{any(java.util.Collection)}.stream().filter(#{any(java.util.function.Predicate)}).collect(Collectors.toSet())" )
81+ .imports ("java.util.stream.Collectors" )
82+ .build ()
83+ .apply (getCursor (),
84+ method .getCoordinates ().replace (),
85+ method .getArguments ().get (0 ),
86+ method .getArguments ().get (1 ));
87+ }
88+ return super .visitMethodInvocation (method , ctx );
7389 }
90+ }
7491 );
7592 }
7693}
0 commit comments