diff --git a/build.gradle.kts b/build.gradle.kts index d4bf10fa..ca2423b1 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -255,6 +255,9 @@ dependencies { "testWithSpringBoot_3_2RuntimeOnly"("org.springframework.boot:spring-boot-starter:3.2.+") "testWithSpringBoot_3_2RuntimeOnly"("org.springframework.boot:spring-boot-starter-test:3.2.+") + "testWithSpringBoot_3_3RuntimeOnly"("org.springdoc:springdoc-openapi-common:1.+") + "testWithSpringBoot_3_3RuntimeOnly"("io.swagger.core.v3:swagger-models:2.+") + "testWithSpringSecurity_5_7RuntimeOnly"("org.springframework:spring-context:5.3.+") "testWithSpringSecurity_5_7RuntimeOnly"("org.springframework.boot:spring-boot-starter:2.7.+") "testWithSpringSecurity_5_7RuntimeOnly"("org.springframework.boot:spring-boot:2.7.+") diff --git a/src/main/resources/META-INF/rewrite/springdoc.yml b/src/main/resources/META-INF/rewrite/springdoc.yml index 5c3e1b52..088c6508 100644 --- a/src/main/resources/META-INF/rewrite/springdoc.yml +++ b/src/main/resources/META-INF/rewrite/springdoc.yml @@ -27,6 +27,7 @@ tags: recipeList: - org.openrewrite.java.springdoc.SwaggerToSpringDoc - org.openrewrite.java.springdoc.ReplaceSpringFoxDependencies + - org.openrewrite.java.springdoc.MigrateSpringdocCommon --- type: specs.openrewrite.org/v1beta/recipe @@ -151,3 +152,22 @@ recipeList: groupId: org.springdoc artifactId: "*" newVersion: 2.1.x + +--- +type: specs.openrewrite.org/v1beta/recipe +name: org.openrewrite.java.springdoc.MigrateSpringdocCommon +displayName: Migrate from springdoc-openapi-common to springdoc-openapi-starter-common +description: Migrate from springdoc-openapi-common to springdoc-openapi-starter-common. +tags: + - springdoc + - openapi +recipeList: + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springdoc.core.customizers.OpenApiCustomiser + newFullyQualifiedTypeName: org.springdoc.core.customizers.OpenApiCustomizer + - org.openrewrite.java.ChangeMethodName: + methodPattern: org.springdoc.core.GroupedOpenApi.Builder addOpenApiCustomiser(..) + newMethodName: addOpenApiCustomizer + - org.openrewrite.java.ChangeType: + oldFullyQualifiedTypeName: org.springdoc.core.GroupedOpenApi + newFullyQualifiedTypeName: org.springdoc.core.models.GroupedOpenApi diff --git a/src/testWithSpringBoot_3_3/java/org/openrewrite/java/springdoc/MigrateSpringdocCommonTest.java b/src/testWithSpringBoot_3_3/java/org/openrewrite/java/springdoc/MigrateSpringdocCommonTest.java new file mode 100644 index 00000000..847a4d06 --- /dev/null +++ b/src/testWithSpringBoot_3_3/java/org/openrewrite/java/springdoc/MigrateSpringdocCommonTest.java @@ -0,0 +1,89 @@ +/* + * Copyright 2024 the original author or authors. + *
+ * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *
+ * https://www.apache.org/licenses/LICENSE-2.0 + *
+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.openrewrite.java.springdoc; + +import org.junit.jupiter.api.Test; +import org.openrewrite.DocumentExample; +import org.openrewrite.InMemoryExecutionContext; +import static org.openrewrite.java.Assertions.java; +import org.openrewrite.java.JavaParser; +import org.openrewrite.test.RecipeSpec; +import org.openrewrite.test.RewriteTest; +import org.openrewrite.test.TypeValidation; + +public class MigrateSpringdocCommonTest implements RewriteTest { + @Override + public void defaults(RecipeSpec spec) { + spec.recipeFromResources("org.openrewrite.java.springdoc.MigrateSpringdocCommon") + .parser(JavaParser.fromJavaVersion().classpath( + "springdoc-openapi-common-1.+", + "swagger-models-2.+" + )); + } + + @Test + @DocumentExample + public void fixCustomiserAndGroupedOpenApi() { + // language=java + rewriteRun( + spec -> spec.afterTypeValidationOptions(TypeValidation.none()), + java( + """ + import io.swagger.v3.oas.models.OpenAPI; + import org.springdoc.core.GroupedOpenApi; + import org.springdoc.core.customizers.OpenApiCustomiser; + + public class OpenApiConfiguration { + + public static void groupedOpenApi() { + GroupedOpenApi.builder() + .group("group") + .pathsToMatch("/api/**") + .addOpenApiCustomiser(new FoobarOpenApiCustomiser()) + .build(); + } + + public static class FoobarOpenApiCustomiser implements OpenApiCustomiser { + @Override + public void customise(OpenAPI openApi) { + } + } + } + """, """ + import io.swagger.v3.oas.models.OpenAPI; + import org.springdoc.core.customizers.OpenApiCustomizer; + import org.springdoc.core.models.GroupedOpenApi; + + public class OpenApiConfiguration { + + public static void groupedOpenApi() { + GroupedOpenApi.builder() + .group("group") + .pathsToMatch("/api/**") + .addOpenApiCustomizer(new FoobarOpenApiCustomiser()) + .build(); + } + + public static class FoobarOpenApiCustomiser implements OpenApiCustomizer { + @Override + public void customise(OpenAPI openApi) { + } + } + } + """ + )); + } +}