From 58357ddc9e96c2bf4c914110f11ac20a7bf6f539 Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Wed, 15 Jan 2025 11:43:37 +0100 Subject: [PATCH] Also handle J.NewArray in MigrateRequestMappingOnFeignClient Fixes #666 --- .../MigrateRequestMappingOnFeignClient.java | 7 ++++ ...igrateRequestMappingOnFeignClientTest.java | 37 +++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/src/main/java/org/openrewrite/java/spring/cloud2022/MigrateRequestMappingOnFeignClient.java b/src/main/java/org/openrewrite/java/spring/cloud2022/MigrateRequestMappingOnFeignClient.java index 5a8101328..2ffa6dfad 100644 --- a/src/main/java/org/openrewrite/java/spring/cloud2022/MigrateRequestMappingOnFeignClient.java +++ b/src/main/java/org/openrewrite/java/spring/cloud2022/MigrateRequestMappingOnFeignClient.java @@ -28,6 +28,8 @@ import org.openrewrite.java.tree.J; import org.openrewrite.java.tree.TypeUtils; +import java.util.List; + public class MigrateRequestMappingOnFeignClient extends Recipe { private static final String FEIGN_CLIENT = "org.springframework.cloud.openfeign.FeignClient"; @@ -122,6 +124,11 @@ private String getPathValue(Expression arg) { } } } + } else if (arg instanceof J.NewArray) { + List initializer = ((J.NewArray) arg).getInitializer(); + if (initializer != null && initializer.size() == 1) { + return getPathValue(initializer.get(0)); + } } return null; } diff --git a/src/test/java/org/openrewrite/java/spring/cloud2022/MigrateRequestMappingOnFeignClientTest.java b/src/test/java/org/openrewrite/java/spring/cloud2022/MigrateRequestMappingOnFeignClientTest.java index b2b8711cc..f1e596e7d 100644 --- a/src/test/java/org/openrewrite/java/spring/cloud2022/MigrateRequestMappingOnFeignClientTest.java +++ b/src/test/java/org/openrewrite/java/spring/cloud2022/MigrateRequestMappingOnFeignClientTest.java @@ -110,6 +110,43 @@ public interface MyServiceClient { ); } + @Test + void requestMappingWithDefaultAttributeNameAndArray() { + rewriteRun( + //language=java + java( + """ + import org.springframework.cloud.openfeign.FeignClient; + import org.springframework.web.bind.annotation.RequestMapping; + import org.springframework.web.bind.annotation.RequestMethod; + import org.springframework.web.bind.annotation.PathVariable; + import org.springframework.web.bind.annotation.GetMapping; + + @FeignClient(name = "myService", url = "http://localhost:8080") + @RequestMapping({"/posts"}) + public interface MyServiceClient { + + @GetMapping(value = "/{postId}", produces = "application/json") + String getPostById(@PathVariable("postId") Long postId); + } + """, + """ + import org.springframework.cloud.openfeign.FeignClient; + import org.springframework.web.bind.annotation.RequestMethod; + import org.springframework.web.bind.annotation.PathVariable; + import org.springframework.web.bind.annotation.GetMapping; + + @FeignClient(path = "/posts", name = "myService", url = "http://localhost:8080") + public interface MyServiceClient { + + @GetMapping(value = "/{postId}", produces = "application/json") + String getPostById(@PathVariable("postId") Long postId); + } + """ + ) + ); + } + @Test void requestMappingWithValueAttributeName() { rewriteRun(