From 8fa0f823495f459950170a5e73336030a9218734 Mon Sep 17 00:00:00 2001 From: Sam Snyder Date: Mon, 4 Mar 2024 12:23:17 -0700 Subject: [PATCH] Fix NoRequestMapping throwing an error when method argument is an array --- .../spring/NoRequestMappingAnnotation.java | 14 ++++++- .../NoRequestMappingAnnotationTest.java | 37 +++++++++++++++++++ 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/openrewrite/java/spring/NoRequestMappingAnnotation.java b/src/main/java/org/openrewrite/java/spring/NoRequestMappingAnnotation.java index b2109ac9f..3f88bae85 100644 --- a/src/main/java/org/openrewrite/java/spring/NoRequestMappingAnnotation.java +++ b/src/main/java/org/openrewrite/java/spring/NoRequestMappingAnnotation.java @@ -25,11 +25,13 @@ import org.openrewrite.java.ChangeType; import org.openrewrite.java.JavaIsoVisitor; import org.openrewrite.java.search.UsesType; +import org.openrewrite.java.tree.Expression; import org.openrewrite.java.tree.J; import org.openrewrite.java.tree.Space; import java.time.Duration; import java.util.Collections; +import java.util.List; import java.util.Optional; import java.util.Set; @@ -152,8 +154,16 @@ private String requestMethodType(@Nullable J.Assignment assignment) { } else if (methodArgumentHasSingleType(assignment)) { if(assignment.getAssignment() instanceof J.NewArray) { J.NewArray newArray = (J.NewArray) assignment.getAssignment(); - assert newArray.getInitializer() != null; - return ((J.FieldAccess) newArray.getInitializer().get(0)).getSimpleName(); + List initializer = newArray.getInitializer(); + if(initializer == null || initializer.size() != 1) { + return null; + } + Expression methodName = initializer.get(0); + if(methodName instanceof J.Identifier) { + return ((J.Identifier)methodName).getSimpleName(); + } else if(methodName instanceof J.FieldAccess) { + return ((J.FieldAccess) methodName).getSimpleName(); + } } else if(assignment.getAssignment() instanceof J.Identifier) { return ((J.Identifier) assignment.getAssignment()).getSimpleName(); } diff --git a/src/testWithSpringBoot_2_1/java/org/openrewrite/java/spring/NoRequestMappingAnnotationTest.java b/src/testWithSpringBoot_2_1/java/org/openrewrite/java/spring/NoRequestMappingAnnotationTest.java index fd12f6053..c27e37cf1 100644 --- a/src/testWithSpringBoot_2_1/java/org/openrewrite/java/spring/NoRequestMappingAnnotationTest.java +++ b/src/testWithSpringBoot_2_1/java/org/openrewrite/java/spring/NoRequestMappingAnnotationTest.java @@ -410,4 +410,41 @@ public ResponseEntity> getUsersPost() { ) ); } + + @Test + void methodInArray() { + //language=java + rewriteRun( + java( + """ + import java.util.*; + import org.springframework.http.ResponseEntity; + import org.springframework.web.bind.annotation.RequestMapping; + import static org.springframework.web.bind.annotation.RequestMethod.POST; + import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; + + public class UsersController { + @RequestMapping(value = { "/users" }, method = { POST }, produces = APPLICATION_JSON_VALUE) + public ResponseEntity> getUsersPost() { + return null; + } + } + """, + """ + import java.util.*; + import org.springframework.http.ResponseEntity; + import org.springframework.web.bind.annotation.PostMapping; + + import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; + + public class UsersController { + @PostMapping(value = { "/users" }, produces = APPLICATION_JSON_VALUE) + public ResponseEntity> getUsersPost() { + return null; + } + } + """ + ) + ); + } }