diff --git a/components/recipe-test-support/src/main/java/org/springframework/sbm/test/RecipeTestSupport.java b/components/recipe-test-support/src/main/java/org/springframework/sbm/test/RecipeTestSupport.java index 76b309e5f..a3162a2f0 100644 --- a/components/recipe-test-support/src/main/java/org/springframework/sbm/test/RecipeTestSupport.java +++ b/components/recipe-test-support/src/main/java/org/springframework/sbm/test/RecipeTestSupport.java @@ -69,7 +69,6 @@ private RecipeTestSupport() { DefaultActionDeserializer.class, RewriteJavaSearchActionDeserializer.class, RewriteRecipeLoader.class, - RewriteRecipeRunner.class, RewriteMigrationResultMerger.class, RewriteSourceFileWrapper.class, SbmRecipeLoader.class, diff --git a/components/sbm-core/src/main/java/org/springframework/sbm/engine/context/ProjectContext.java b/components/sbm-core/src/main/java/org/springframework/sbm/engine/context/ProjectContext.java index 0657becda..d676508a3 100644 --- a/components/sbm-core/src/main/java/org/springframework/sbm/engine/context/ProjectContext.java +++ b/components/sbm-core/src/main/java/org/springframework/sbm/engine/context/ProjectContext.java @@ -15,21 +15,26 @@ */ package org.springframework.sbm.engine.context; +import lombok.Getter; +import lombok.Setter; import org.openrewrite.ExecutionContext; +import org.openrewrite.Recipe; +import org.openrewrite.Result; +import org.openrewrite.SourceFile; import org.openrewrite.java.JavaParser; import org.springframework.sbm.build.api.ApplicationModules; -import org.springframework.sbm.build.api.Module; import org.springframework.sbm.build.api.BuildFile; +import org.springframework.sbm.build.api.Module; import org.springframework.sbm.build.api.RootBuildFileFilter; import org.springframework.sbm.build.filter.BuildFileProjectResourceFilter; +import org.springframework.sbm.engine.recipe.OpenRewriteSourceFilesFinder; +import org.springframework.sbm.engine.recipe.RewriteMigrationResultMerger; import org.springframework.sbm.java.api.ProjectJavaSources; import org.springframework.sbm.java.impl.ProjectJavaSourcesImpl; import org.springframework.sbm.java.refactoring.JavaRefactoringFactory; import org.springframework.sbm.java.util.BasePackageCalculator; import org.springframework.sbm.project.resource.ProjectResourceSet; import org.springframework.sbm.project.resource.filter.ProjectResourceFinder; -import lombok.Getter; -import lombok.Setter; import java.nio.file.Path; import java.util.List; @@ -46,14 +51,16 @@ public class ProjectContext { private String revision; private final JavaParser javaParser; private final ExecutionContext executionContext; + private final RewriteMigrationResultMerger resultMerger; - public ProjectContext(JavaRefactoringFactory javaRefactoringFactory, Path projectRootDirectory, ProjectResourceSet projectResources, BasePackageCalculator basePackageCalculator, JavaParser javaParser, ExecutionContext executionContext) { + public ProjectContext(JavaRefactoringFactory javaRefactoringFactory, Path projectRootDirectory, ProjectResourceSet projectResources, BasePackageCalculator basePackageCalculator, JavaParser javaParser, ExecutionContext executionContext, RewriteMigrationResultMerger resultMerger) { this.projectRootDirectory = projectRootDirectory.toAbsolutePath(); this.projectResources = projectResources; this.javaRefactoringFactory = javaRefactoringFactory; this.basePackageCalculator = basePackageCalculator; this.javaParser = javaParser; this.executionContext = executionContext; + this.resultMerger = resultMerger; } public ProjectResourceSet getProjectResources() { @@ -103,4 +110,9 @@ public ApplicationModules getApplicationModules() { return new ApplicationModules(getModules()); } + public void apply(Recipe recipe) { + List rewriteSourceFiles = this.search(new OpenRewriteSourceFilesFinder()); + List results = recipe.run(rewriteSourceFiles, executionContext).getResults(); + resultMerger.mergeResults(this, results); + } } diff --git a/components/sbm-core/src/main/java/org/springframework/sbm/engine/context/ProjectContextFactory.java b/components/sbm-core/src/main/java/org/springframework/sbm/engine/context/ProjectContextFactory.java index f0cca76f2..3f64cbfbc 100644 --- a/components/sbm-core/src/main/java/org/springframework/sbm/engine/context/ProjectContextFactory.java +++ b/components/sbm-core/src/main/java/org/springframework/sbm/engine/context/ProjectContextFactory.java @@ -19,6 +19,7 @@ import org.openrewrite.java.JavaParser; import org.springframework.sbm.build.api.BuildFile; import org.springframework.sbm.build.filter.BuildFileProjectResourceFilter; +import org.springframework.sbm.engine.recipe.RewriteMigrationResultMerger; import org.springframework.sbm.java.refactoring.JavaRefactoringFactory; import org.springframework.sbm.java.impl.ClasspathRegistry; import org.springframework.sbm.java.util.BasePackageCalculator; @@ -41,6 +42,7 @@ public class ProjectContextFactory { private final BasePackageCalculator basePackageCalculator; private final JavaParser javaParser; private final ExecutionContext executionContext; + private final RewriteMigrationResultMerger resultMerger; @NotNull public ProjectContext createProjectContext(Path projectDir, ProjectResourceSet projectResourceSet) { @@ -48,7 +50,7 @@ public ProjectContext createProjectContext(Path projectDir, ProjectResourceSet p applyProjectResourceWrappers(projectResourceSet); List buildFiles = new BuildFileProjectResourceFilter().apply(projectResourceSet); ClasspathRegistry.initializeFromBuildFiles(buildFiles); - ProjectContext projectContext = new ProjectContext(javaRefactoringFactory, projectDir, projectResourceSet, basePackageCalculator, javaParser, executionContext); + ProjectContext projectContext = new ProjectContext(javaRefactoringFactory, projectDir, projectResourceSet, basePackageCalculator, javaParser, executionContext, resultMerger); return projectContext; } diff --git a/components/sbm-core/src/main/java/org/springframework/sbm/engine/recipe/OpenRewriteDeclarativeRecipeAdapter.java b/components/sbm-core/src/main/java/org/springframework/sbm/engine/recipe/OpenRewriteDeclarativeRecipeAdapter.java index 296b52bec..b473b24eb 100644 --- a/components/sbm-core/src/main/java/org/springframework/sbm/engine/recipe/OpenRewriteDeclarativeRecipeAdapter.java +++ b/components/sbm-core/src/main/java/org/springframework/sbm/engine/recipe/OpenRewriteDeclarativeRecipeAdapter.java @@ -34,10 +34,6 @@ public class OpenRewriteDeclarativeRecipeAdapter extends AbstractAction { @JsonIgnore @Setter private RewriteRecipeLoader rewriteRecipeLoader; - @JsonIgnore - @Autowired - @Setter - private RewriteRecipeRunner rewriteRecipeRunner; public OpenRewriteDeclarativeRecipeAdapter() { super(builder()); @@ -51,6 +47,6 @@ public boolean isApplicable(ProjectContext context) { @Override public void apply(ProjectContext context) { Recipe recipe = rewriteRecipeLoader.createRecipe(openRewriteRecipe); - rewriteRecipeRunner.run(context, recipe); + context.apply(recipe); } } diff --git a/components/sbm-core/src/main/java/org/springframework/sbm/engine/recipe/OpenRewriteNamedRecipeAdapter.java b/components/sbm-core/src/main/java/org/springframework/sbm/engine/recipe/OpenRewriteNamedRecipeAdapter.java index 20ced6ad9..6ce725e97 100644 --- a/components/sbm-core/src/main/java/org/springframework/sbm/engine/recipe/OpenRewriteNamedRecipeAdapter.java +++ b/components/sbm-core/src/main/java/org/springframework/sbm/engine/recipe/OpenRewriteNamedRecipeAdapter.java @@ -37,13 +37,9 @@ public class OpenRewriteNamedRecipeAdapter extends AbstractAction { @JsonIgnore private RewriteRecipeLoader rewriteRecipeLoader; - @JsonIgnore - @Autowired - private RewriteRecipeRunner rewriteRecipeRunner; - @Override public void apply(ProjectContext context) { Recipe recipe = rewriteRecipeLoader.loadRewriteRecipe(openRewriteRecipeName); - rewriteRecipeRunner.run(context, recipe); + context.apply(recipe); } } diff --git a/components/sbm-core/src/main/java/org/springframework/sbm/engine/recipe/RewriteRecipeRunner.java b/components/sbm-core/src/main/java/org/springframework/sbm/engine/recipe/RewriteRecipeRunner.java deleted file mode 100644 index d563d347b..000000000 --- a/components/sbm-core/src/main/java/org/springframework/sbm/engine/recipe/RewriteRecipeRunner.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2021 - 2022 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.springframework.sbm.engine.recipe; - -import lombok.RequiredArgsConstructor; -import org.openrewrite.ExecutionContext; -import org.openrewrite.Recipe; -import org.openrewrite.Result; -import org.openrewrite.SourceFile; -import org.springframework.sbm.engine.context.ProjectContext; -import org.springframework.stereotype.Component; - -import java.util.List; - -@Component -@RequiredArgsConstructor -public class RewriteRecipeRunner { - private final RewriteMigrationResultMerger resultMerger; - private final ExecutionContext executionContext; - - // FIXME: Make this a method 'apply(org.openrewrite.Recipe)' on ProjectContext, see https://github.com/spring-projects-experimental/spring-boot-migrator/issues/803 - public void run(ProjectContext context, Recipe recipe) { - List rewriteSourceFiles = context.search(new OpenRewriteSourceFilesFinder()); - List results = recipe.run(rewriteSourceFiles, executionContext).getResults(); - resultMerger.mergeResults(context, results); - } - -} diff --git a/components/sbm-core/src/test/java/org/springframework/sbm/archfitfun/ExecutionScopeArchFitTest.java b/components/sbm-core/src/test/java/org/springframework/sbm/archfitfun/ExecutionScopeArchFitTest.java index 3b4680310..f14d4d44a 100644 --- a/components/sbm-core/src/test/java/org/springframework/sbm/archfitfun/ExecutionScopeArchFitTest.java +++ b/components/sbm-core/src/test/java/org/springframework/sbm/archfitfun/ExecutionScopeArchFitTest.java @@ -119,6 +119,7 @@ RewritePlainTextParser.class, RewriteMavenParser.class, MavenSettingsInitializer.class, + RewriteMigrationResultMerger.class, RewriteMavenArtifactDownloader.class, JavaProvenanceMarkerFactory.class, MavenConfigHandler.class, diff --git a/components/sbm-core/src/test/java/org/springframework/sbm/engine/recipe/OpenRewriteDeclarativeRecipeAdapterIntegrationTest.java b/components/sbm-core/src/test/java/org/springframework/sbm/engine/recipe/OpenRewriteDeclarativeRecipeAdapterIntegrationTest.java index 88ce12869..ddddca2b5 100644 --- a/components/sbm-core/src/test/java/org/springframework/sbm/engine/recipe/OpenRewriteDeclarativeRecipeAdapterIntegrationTest.java +++ b/components/sbm-core/src/test/java/org/springframework/sbm/engine/recipe/OpenRewriteDeclarativeRecipeAdapterIntegrationTest.java @@ -32,7 +32,6 @@ import java.io.IOException; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertThrows; @SpringBootTest(classes = { RecipeParser.class, @@ -43,7 +42,6 @@ ActionDeserializerRegistry.class, DefaultActionDeserializer.class, RewriteMigrationResultMerger.class, - RewriteRecipeRunner.class, RewriteSourceFileWrapper.class, CustomValidatorBean.class, RewriteExecutionContext.class, diff --git a/components/sbm-core/src/test/java/org/springframework/sbm/engine/recipe/OpenRewriteDeclarativeRecipeAdapterTest.java b/components/sbm-core/src/test/java/org/springframework/sbm/engine/recipe/OpenRewriteDeclarativeRecipeAdapterTest.java index 574ba0d10..fa505f579 100644 --- a/components/sbm-core/src/test/java/org/springframework/sbm/engine/recipe/OpenRewriteDeclarativeRecipeAdapterTest.java +++ b/components/sbm-core/src/test/java/org/springframework/sbm/engine/recipe/OpenRewriteDeclarativeRecipeAdapterTest.java @@ -31,9 +31,6 @@ public class OpenRewriteDeclarativeRecipeAdapterTest { @Mock RewriteRecipeLoader rewriteRecipeLoader; - @Mock - RewriteRecipeRunner rewriteRecipeRunner; - @InjectMocks OpenRewriteDeclarativeRecipeAdapter sut; @@ -41,14 +38,13 @@ public class OpenRewriteDeclarativeRecipeAdapterTest { void testApply() { String recipeDeclaration = "name: some-recipe"; sut.setOpenRewriteRecipe(recipeDeclaration); - org.openrewrite.Recipe recipe = mock(org.openrewrite.Recipe.class); when(rewriteRecipeLoader.createRecipe(recipeDeclaration)).thenReturn(recipe); ProjectContext context = mock(ProjectContext.class); sut.apply(context); - verify(rewriteRecipeRunner).run(context, recipe); + verify(context).apply(recipe); } diff --git a/components/sbm-core/src/test/java/org/springframework/sbm/engine/recipe/OpenRewriteNamedRecipeAdapterIntegrationTest.java b/components/sbm-core/src/test/java/org/springframework/sbm/engine/recipe/OpenRewriteNamedRecipeAdapterIntegrationTest.java index 58af5e3cb..122e81c23 100644 --- a/components/sbm-core/src/test/java/org/springframework/sbm/engine/recipe/OpenRewriteNamedRecipeAdapterIntegrationTest.java +++ b/components/sbm-core/src/test/java/org/springframework/sbm/engine/recipe/OpenRewriteNamedRecipeAdapterIntegrationTest.java @@ -42,7 +42,6 @@ ActionDeserializerRegistry.class, DefaultActionDeserializer.class, RewriteMigrationResultMerger.class, - RewriteRecipeRunner.class, RewriteSourceFileWrapper.class, RewriteRecipeLoader.class, CustomValidatorBean.class, diff --git a/components/sbm-core/src/test/java/org/springframework/sbm/engine/recipe/OpenRewriteNamedRecipeAdapterTest.java b/components/sbm-core/src/test/java/org/springframework/sbm/engine/recipe/OpenRewriteNamedRecipeAdapterTest.java index ae19c77c3..3633a51bc 100644 --- a/components/sbm-core/src/test/java/org/springframework/sbm/engine/recipe/OpenRewriteNamedRecipeAdapterTest.java +++ b/components/sbm-core/src/test/java/org/springframework/sbm/engine/recipe/OpenRewriteNamedRecipeAdapterTest.java @@ -21,18 +21,8 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.context.SpringBootTest; import org.springframework.sbm.engine.context.ProjectContext; -import org.springframework.sbm.project.RewriteSourceFileWrapper; -import org.springframework.sbm.project.resource.ResourceHelper; -import org.springframework.sbm.project.resource.TestProjectContext; -import org.springframework.validation.beanvalidation.CustomValidatorBean; -import java.io.IOException; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.*; @ExtendWith(MockitoExtension.class) @@ -40,9 +30,6 @@ public class OpenRewriteNamedRecipeAdapterTest { @Mock RewriteRecipeLoader rewriteRecipeLoader; - @Mock - RewriteRecipeRunner rewriteRecipeRunner; - @InjectMocks OpenRewriteNamedRecipeAdapter sut; @@ -57,7 +44,7 @@ void testApply() { sut.apply(context); - verify(rewriteRecipeRunner).run(context, recipe); + verify(context).apply(recipe); } } diff --git a/components/sbm-core/src/test/java/org/springframework/sbm/project/parser/ProjectContextInitializerTest.java b/components/sbm-core/src/test/java/org/springframework/sbm/project/parser/ProjectContextInitializerTest.java index fea819935..91e093af3 100644 --- a/components/sbm-core/src/test/java/org/springframework/sbm/project/parser/ProjectContextInitializerTest.java +++ b/components/sbm-core/src/test/java/org/springframework/sbm/project/parser/ProjectContextInitializerTest.java @@ -43,6 +43,7 @@ import org.springframework.sbm.engine.context.ProjectRootPathResolver; import org.springframework.sbm.engine.git.GitSupport; import org.springframework.sbm.engine.precondition.PreconditionVerifier; +import org.springframework.sbm.engine.recipe.RewriteMigrationResultMerger; import org.springframework.sbm.java.impl.RewriteJavaParser; import org.springframework.sbm.java.refactoring.JavaRefactoringFactoryImpl; import org.springframework.sbm.java.util.BasePackageCalculator; @@ -75,6 +76,7 @@ ProjectContextFactory.class, MavenPomCacheProvider.class, SbmApplicationProperties.class, + RewriteMigrationResultMerger.class, PathScanner.class, RewriteJavaParser.class, RewritePlainTextParser.class, diff --git a/components/sbm-recipes-jee-to-boot/src/main/java/org/springframework/sbm/jee/jaxrs/MigrateJaxRsRecipe.java b/components/sbm-recipes-jee-to-boot/src/main/java/org/springframework/sbm/jee/jaxrs/MigrateJaxRsRecipe.java index fd5bd5064..c069fc09a 100644 --- a/components/sbm-recipes-jee-to-boot/src/main/java/org/springframework/sbm/jee/jaxrs/MigrateJaxRsRecipe.java +++ b/components/sbm-recipes-jee-to-boot/src/main/java/org/springframework/sbm/jee/jaxrs/MigrateJaxRsRecipe.java @@ -25,7 +25,6 @@ import org.springframework.sbm.engine.recipe.OpenRewriteDeclarativeRecipeAdapter; import org.springframework.sbm.engine.recipe.Recipe; import org.springframework.sbm.engine.recipe.RewriteRecipeLoader; -import org.springframework.sbm.engine.recipe.RewriteRecipeRunner; import org.springframework.sbm.java.JavaRecipeAction; import org.springframework.sbm.java.impl.ClasspathRegistry; import org.springframework.sbm.java.migration.actions.ReplaceTypeAction; @@ -50,7 +49,7 @@ public class MigrateJaxRsRecipe { private final Supplier javaParserSupplier = () -> JavaParser.fromJavaVersion().classpath(ClasspathRegistry.getInstance().getCurrentDependencies()).build(); @Bean - public Recipe jaxRs(RewriteRecipeLoader rewriteRecipeLoader, RewriteRecipeRunner rewriteRecipeRunner) { + public Recipe jaxRs(RewriteRecipeLoader rewriteRecipeLoader) { return Recipe.builder() .name("migrate-jax-rs") .order(60) @@ -137,7 +136,6 @@ public Recipe jaxRs(RewriteRecipeLoader rewriteRecipeLoader, RewriteRecipeRunner .condition(HasAnnotation.builder().annotation("org.springframework.web.bind.annotation.RequestParam").build()) .description("Adds required=false to all @RequestParam annotations") .rewriteRecipeLoader(rewriteRecipeLoader) - .rewriteRecipeRunner(rewriteRecipeRunner) .openRewriteRecipe( """ type: specs.openrewrite.org/v1beta/recipe diff --git a/components/sbm-recipes-jee-to-boot/src/test/java/org/springframework/sbm/jee/jaxrs/recipes/BootifyJaxRsAnnotationsRecipeTest.java b/components/sbm-recipes-jee-to-boot/src/test/java/org/springframework/sbm/jee/jaxrs/recipes/BootifyJaxRsAnnotationsRecipeTest.java index 6acb4a707..350d0ecb9 100644 --- a/components/sbm-recipes-jee-to-boot/src/test/java/org/springframework/sbm/jee/jaxrs/recipes/BootifyJaxRsAnnotationsRecipeTest.java +++ b/components/sbm-recipes-jee-to-boot/src/test/java/org/springframework/sbm/jee/jaxrs/recipes/BootifyJaxRsAnnotationsRecipeTest.java @@ -15,17 +15,15 @@ */ package org.springframework.sbm.jee.jaxrs.recipes; -import org.springframework.sbm.engine.recipe.OpenRewriteDeclarativeRecipeAdapter; -import org.springframework.sbm.java.impl.RewriteJavaParser; -import org.springframework.sbm.project.resource.SbmApplicationProperties; -import org.springframework.sbm.test.RecipeTestSupport; +import org.junit.jupiter.api.Test; import org.springframework.sbm.build.migration.actions.AddDependencies; +import org.springframework.sbm.engine.recipe.OpenRewriteDeclarativeRecipeAdapter; import org.springframework.sbm.engine.recipe.Recipe; import org.springframework.sbm.java.JavaRecipeAction; import org.springframework.sbm.java.migration.actions.ReplaceTypeAction; import org.springframework.sbm.jee.jaxrs.MigrateJaxRsRecipe; import org.springframework.sbm.jee.jaxrs.actions.ConvertJaxRsAnnotations; -import org.junit.jupiter.api.Test; +import org.springframework.sbm.test.RecipeTestSupport; import java.util.Optional; @@ -34,7 +32,7 @@ public class BootifyJaxRsAnnotationsRecipeTest { @Test void test() { - Recipe jaxRsRecipe = new MigrateJaxRsRecipe().jaxRs(null, null); + Recipe jaxRsRecipe = new MigrateJaxRsRecipe().jaxRs(null); Optional recipe = Optional.of(jaxRsRecipe); RecipeTestSupport.assertThatRecipeExists(recipe); RecipeTestSupport.assertThatRecipeHasActions(recipe,