Skip to content

Commit 6e10281

Browse files
committed
Include UseMapOf with JavaUtilAPIs
1 parent 44b4f82 commit 6e10281

File tree

2 files changed

+36
-33
lines changed

2 files changed

+36
-33
lines changed

src/main/java/org/openrewrite/java/migrate/util/UseMapOf.java

Lines changed: 35 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -48,41 +48,43 @@ public String getDescription() {
4848

4949
@Override
5050
public TreeVisitor<?, ExecutionContext> getVisitor() {
51-
return Preconditions.check(Preconditions.and(new UsesJavaVersion<>(10),
52-
new UsesMethod<>(NEW_HASH_MAP)), new UseMapOfVisitor());
53-
}
51+
return Preconditions.check(
52+
Preconditions.and(
53+
new UsesJavaVersion<>(10),
54+
new UsesMethod<>(NEW_HASH_MAP)),
55+
new JavaVisitor<ExecutionContext>() {
56+
@Override
57+
public J visitNewClass(J.NewClass newClass, ExecutionContext ctx) {
58+
J.NewClass n = (J.NewClass) super.visitNewClass(newClass, ctx);
59+
J.Block body = n.getBody();
60+
if (NEW_HASH_MAP.matches(n) && body != null && body.getStatements().size() == 1) {
61+
Statement statement = body.getStatements().get(0);
62+
if (statement instanceof J.Block) {
63+
List<Expression> args = new ArrayList<>();
64+
StringJoiner mapOf = new StringJoiner(", ", "Map.of(", ")");
65+
for (Statement stat : ((J.Block) statement).getStatements()) {
66+
if (!(stat instanceof J.MethodInvocation) || !MAP_PUT.matches((Expression) stat)) {
67+
return n;
68+
}
69+
J.MethodInvocation put = (J.MethodInvocation) stat;
70+
args.addAll(put.getArguments());
71+
mapOf.add("#{any()}");
72+
mapOf.add("#{any()}");
73+
}
5474

55-
private static class UseMapOfVisitor extends JavaVisitor<ExecutionContext> {
56-
@Override
57-
public J visitNewClass(J.NewClass newClass, ExecutionContext ctx) {
58-
J.NewClass n = (J.NewClass) super.visitNewClass(newClass, ctx);
59-
J.Block body = n.getBody();
60-
if (NEW_HASH_MAP.matches(n) && body != null && body.getStatements().size() == 1) {
61-
Statement statement = body.getStatements().get(0);
62-
if (statement instanceof J.Block) {
63-
List<Expression> args = new ArrayList<>();
64-
StringJoiner mapOf = new StringJoiner(", ", "Map.of(", ")");
65-
for (Statement stat : ((J.Block) statement).getStatements()) {
66-
if (!(stat instanceof J.MethodInvocation) || !MAP_PUT.matches((Expression) stat)) {
67-
return n;
75+
maybeRemoveImport("java.util.HashMap");
76+
maybeAddImport("java.util.Map");
77+
return JavaTemplate.builder(mapOf.toString())
78+
.contextSensitive()
79+
.imports("java.util.Map")
80+
.build()
81+
.apply(updateCursor(n), n.getCoordinates().replace(), args.toArray());
82+
}
6883
}
69-
J.MethodInvocation put = (J.MethodInvocation) stat;
70-
args.addAll(put.getArguments());
71-
mapOf.add("#{any()}");
72-
mapOf.add("#{any()}");
73-
}
74-
75-
maybeRemoveImport("java.util.HashMap");
76-
maybeAddImport("java.util.Map");
77-
return JavaTemplate.builder(mapOf.toString())
78-
.contextSensitive()
79-
.imports("java.util.Map")
80-
.build()
81-
.apply(updateCursor(n), n.getCoordinates().replace(), args.toArray());
82-
}
83-
}
8484

85-
return n;
86-
}
85+
return n;
86+
}
87+
});
8788
}
89+
8890
}

src/main/resources/META-INF/rewrite/java-util-apis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,4 @@ recipeList:
2626
- org.openrewrite.java.migrate.util.MigrateCollectionsUnmodifiableList
2727
- org.openrewrite.java.migrate.util.MigrateCollectionsUnmodifiableSet
2828
- org.openrewrite.java.migrate.util.ReplaceStreamCollectWithToList
29+
- org.openrewrite.java.migrate.util.UseMapOf

0 commit comments

Comments
 (0)