From 958be908f5af7ea541a326e29e9fa24ca21b911f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Kr=C3=BCger?= Date: Fri, 29 Sep 2023 09:20:11 +0200 Subject: [PATCH 01/32] Remove @Component and declare using @Bean --- .../autoconfigure/ProjectResourceSetConfiguration.java | 1 + .../sbm/parsers/MavenPasswordDecrypter.java | 1 - .../sbm/parsers/RewriteParserConfiguration.java | 8 +++++++- .../sbm/project/RewriteSourceFileWrapper.java | 1 - .../sbm/project/resource/ProjectResourceSerializer.java | 3 --- .../sbm/project/resource/ProjectResourceSetHolder.java | 2 +- .../project/resource/ProjectResourceSetSerializer.java | 1 - .../project/resource/RewriteMigrationResultMerger.java | 1 - .../sbm/project/resource/SbmApplicationProperties.java | 1 - 9 files changed, 9 insertions(+), 10 deletions(-) diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/boot/autoconfigure/ProjectResourceSetConfiguration.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/boot/autoconfigure/ProjectResourceSetConfiguration.java index 924347d8a..5020736f7 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/boot/autoconfigure/ProjectResourceSetConfiguration.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/boot/autoconfigure/ProjectResourceSetConfiguration.java @@ -53,4 +53,5 @@ ProjectResourceSetSerializer projectResourceSetSerializer(ProjectResourceSeriali ProjectResourceSetFactory projectResourceSetFactory(RewriteMigrationResultMerger rewriteMigrationResultMerger, RewriteSourceFileWrapper sourceFileWrapper, ExecutionContext executionContext) { return new ProjectResourceSetFactory(rewriteMigrationResultMerger, sourceFileWrapper, executionContext); } + } diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/MavenPasswordDecrypter.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/MavenPasswordDecrypter.java index 81aa7f57c..103314082 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/MavenPasswordDecrypter.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/MavenPasswordDecrypter.java @@ -32,7 +32,6 @@ * * @author Fabian Krüger */ -@Component @RequiredArgsConstructor // TODO: should be package private public class MavenPasswordDecrypter { diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteParserConfiguration.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteParserConfiguration.java index 82f8bf20f..e80da062a 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteParserConfiguration.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteParserConfiguration.java @@ -30,6 +30,7 @@ import org.springframework.context.annotation.Import; import org.springframework.sbm.boot.autoconfigure.ParserPropertiesPostProcessor; import org.springframework.sbm.parsers.events.RewriteParsingEventListenerAdapter; +import org.springframework.sbm.project.resource.SbmApplicationProperties; import org.springframework.sbm.scopes.ProjectMetadata; import org.springframework.sbm.scopes.ScanScope; import org.springframework.sbm.boot.autoconfigure.ScopeConfiguration; @@ -48,7 +49,7 @@ */ @Slf4j @AutoConfiguration(after = {ScopeConfiguration.class}) -@EnableConfigurationProperties(ParserProperties.class) +@EnableConfigurationProperties({ParserProperties.class, SbmApplicationProperties.class}) @Import({ScanScope.class, ScopeConfiguration.class}) public class RewriteParserConfiguration { @@ -60,6 +61,11 @@ public class RewriteParserConfiguration { // return new ProvenanceMarkerFactory(projectParserFactory); // } + @Bean + MavenPasswordDecrypter mavenPasswordDecrypter() { + return new MavenPasswordDecrypter(); + } + @Bean MavenProvenanceMarkerFactory mavenProvenanceMarkerFactory() { return new MavenProvenanceMarkerFactory(); diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/project/RewriteSourceFileWrapper.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/project/RewriteSourceFileWrapper.java index 73a0b935b..4bb8be908 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/project/RewriteSourceFileWrapper.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/project/RewriteSourceFileWrapper.java @@ -23,7 +23,6 @@ import java.util.List; import java.util.stream.Collectors; -@Component public class RewriteSourceFileWrapper { public List> wrapRewriteSourceFiles(Path absoluteProjectDir, List parsedByRewrite) { diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/project/resource/ProjectResourceSerializer.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/project/resource/ProjectResourceSerializer.java index 3d8c4beaa..3ae9d6dc3 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/project/resource/ProjectResourceSerializer.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/project/resource/ProjectResourceSerializer.java @@ -15,14 +15,11 @@ */ package org.springframework.sbm.project.resource; -import org.springframework.stereotype.Component; - import java.io.BufferedWriter; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -@Component public class ProjectResourceSerializer { public void writeChanges(InternalProjectResource projectResource) { diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/project/resource/ProjectResourceSetHolder.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/project/resource/ProjectResourceSetHolder.java index 052bf5b77..4bff0b69f 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/project/resource/ProjectResourceSetHolder.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/project/resource/ProjectResourceSetHolder.java @@ -21,7 +21,7 @@ import java.util.ArrayList; -@Component +// TODO: Making ProjectResourceSet a scoped bean would allow to remove this class. @RequiredArgsConstructor public class ProjectResourceSetHolder { private ProjectResourceSet projectResourceSet; diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/project/resource/ProjectResourceSetSerializer.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/project/resource/ProjectResourceSetSerializer.java index 188365ec9..1ab2248d5 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/project/resource/ProjectResourceSetSerializer.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/project/resource/ProjectResourceSetSerializer.java @@ -18,7 +18,6 @@ import lombok.RequiredArgsConstructor; import org.springframework.stereotype.Component; -@Component @RequiredArgsConstructor public class ProjectResourceSetSerializer { diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/project/resource/RewriteMigrationResultMerger.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/project/resource/RewriteMigrationResultMerger.java index 30de8da56..4409cf291 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/project/resource/RewriteMigrationResultMerger.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/project/resource/RewriteMigrationResultMerger.java @@ -26,7 +26,6 @@ import java.util.List; import java.util.Optional; -@Component @RequiredArgsConstructor public class RewriteMigrationResultMerger { diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/project/resource/SbmApplicationProperties.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/project/resource/SbmApplicationProperties.java index a3aa9f8d0..ea5e72362 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/project/resource/SbmApplicationProperties.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/project/resource/SbmApplicationProperties.java @@ -26,7 +26,6 @@ @Setter @Getter -@Component @ConfigurationProperties(prefix = "sbm") public class SbmApplicationProperties { private boolean gitSupportEnabled; From e3c2a15df073c6a4640b70dec36a629accf65a6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Kr=C3=BCger?= Date: Fri, 29 Sep 2023 09:49:12 +0200 Subject: [PATCH 02/32] Add dependency to rewrite-java-17 --- sbm-support-rewrite/pom.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sbm-support-rewrite/pom.xml b/sbm-support-rewrite/pom.xml index fae58fa38..2dff14a08 100644 --- a/sbm-support-rewrite/pom.xml +++ b/sbm-support-rewrite/pom.xml @@ -116,6 +116,11 @@ rewrite-java ${rewrite.version} + + org.openrewrite + rewrite-java-17 + ${rewrite.version} + org.openrewrite rewrite-json From 8f83962f0ba7f0059b75cb2aba70d1d33b01ad98 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Kr=C3=BCger?= Date: Fri, 29 Sep 2023 11:12:01 +0200 Subject: [PATCH 03/32] Add dependency to rewrite-migrate-java --- sbm-support-rewrite/pom.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sbm-support-rewrite/pom.xml b/sbm-support-rewrite/pom.xml index 2dff14a08..2d16be60c 100644 --- a/sbm-support-rewrite/pom.xml +++ b/sbm-support-rewrite/pom.xml @@ -22,6 +22,7 @@ UTF-8 3.1.3 8.5.1 + 2.1.0 0.15.0-SNAPSHOT 5.3.2 3.9.1 @@ -151,6 +152,11 @@ rewrite-properties ${rewrite.version} + + org.openrewrite.recipe + rewrite-migrate-java + ${rewrite-migrate-java.version} + org.projectlombok lombok From dd26bbb20026befc9b0bb64cc83e36ddc9920fe7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Kr=C3=BCger?= Date: Fri, 29 Sep 2023 11:44:52 +0200 Subject: [PATCH 04/32] Removed migrate-java again, it does not belong here --- sbm-support-rewrite/pom.xml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/sbm-support-rewrite/pom.xml b/sbm-support-rewrite/pom.xml index 2d16be60c..2dff14a08 100644 --- a/sbm-support-rewrite/pom.xml +++ b/sbm-support-rewrite/pom.xml @@ -22,7 +22,6 @@ UTF-8 3.1.3 8.5.1 - 2.1.0 0.15.0-SNAPSHOT 5.3.2 3.9.1 @@ -152,11 +151,6 @@ rewrite-properties ${rewrite.version} - - org.openrewrite.recipe - rewrite-migrate-java - ${rewrite-migrate-java.version} - org.projectlombok lombok From 44822337a5a4589ee4cae9e2db2502aa31565a86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Kr=C3=BCger?= Date: Sat, 30 Sep 2023 16:17:07 +0200 Subject: [PATCH 05/32] Replace decompiles code with actual source --- .../sbm/parsers/HelperWithoutAGoodName.java | 36 ++++++++----------- 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/HelperWithoutAGoodName.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/HelperWithoutAGoodName.java index d6503c22a..a7f73e3d3 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/HelperWithoutAGoodName.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/HelperWithoutAGoodName.java @@ -40,37 +40,29 @@ import java.util.stream.Collectors; import java.util.stream.Stream; +import static org.openrewrite.Tree.randomId; + /** * @author Fabian Krüger */ @Slf4j +// TODO: 945 ModuleParser ? public class HelperWithoutAGoodName { - /** - * {@link MavenMojoProjectParser#addProvenance(Path, List, Collection)} - */ - public UnaryOperator addProvenance(Path baseDir, List provenance, @Nullable Collection generatedSources) { -// MavenMojoProjectParser mavenMojoProjectParser = createMavenMojoProjectParser(baseDir); -// Method method = ReflectionUtils.findMethod(MavenMojoProjectParser.class, "addProvenance", Path.class, List.class, Collection.class); -// ReflectionUtils.makeAccessible(method); -// if(method == null) { -// throw new IllegalStateException("Could not find method '%s' on %s while trying to call it.".formatted("addProvenance", MavenMojoProjectParser.class.getName())); -// } -// Object result = ReflectionUtils.invokeMethod(method, mavenMojoProjectParser, baseDir, provenance, generatedSources); -// return (UnaryOperator) result; - return (s) -> { - Markers markers = s.getMarkers(); - Marker marker; - for (Iterator var5 = provenance.iterator(); var5.hasNext(); markers = markers.addIfAbsent(marker)) { - marker = (Marker) var5.next(); + public UnaryOperator addProvenance( + Path baseDir, + List provenance, + @Nullable Collection generatedSources + ) { + return s -> { + Markers markers = s.getMarkers(); + for (Marker marker : provenance) { + markers = markers.addIfAbsent(marker); } - if (generatedSources != null && generatedSources.contains(baseDir.resolve(s.getSourcePath()))) { - markers = markers.addIfAbsent(new Generated(Tree.randomId())); + markers = markers.addIfAbsent(new Generated(randomId())); } - - return (T) s.withMarkers(markers); + return s.withMarkers(markers); }; } From 96abe40faf610da6aefce426aff490f39def4bb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Kr=C3=BCger?= Date: Sat, 30 Sep 2023 16:20:25 +0200 Subject: [PATCH 06/32] Add javadoc --- .../sbm/parsers/HelperWithoutAGoodName.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/HelperWithoutAGoodName.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/HelperWithoutAGoodName.java index a7f73e3d3..28f2cdb1d 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/HelperWithoutAGoodName.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/HelperWithoutAGoodName.java @@ -49,6 +49,9 @@ // TODO: 945 ModuleParser ? public class HelperWithoutAGoodName { + /** + * Add {@link Marker}s to {@link SourceFile}. + */ public UnaryOperator addProvenance( Path baseDir, List provenance, @@ -67,7 +70,7 @@ public UnaryOperator addProvenance( } /** - * process sources in src/main/java of current module. + * Parse Java sources and resources under {@code src/main} of current module. */ public List processMainSources( Path baseDir, @@ -154,7 +157,7 @@ private static JavaSourceSet sourceSet(String name, List dependencies, Jav /** - * Calls {@link MavenMojoProjectParser#processTestSources(SbmMavenProject, JavaParser.Builder, ResourceParser, List, Set, ExecutionContext)} + * Parse Java sources and resource files under {@code src/test}. */ public List processTestSources( Path baseDir, From d3910b0d809c48266ca87f11410979fec2d69478 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Kr=C3=BCger?= Date: Sat, 30 Sep 2023 16:21:16 +0200 Subject: [PATCH 07/32] Renamed HelperWithoutAGoodName --- .../{HelperWithoutAGoodName.java => ModuleParser.java} | 4 +--- .../sbm/parsers/RewriteParserConfiguration.java | 8 ++++---- .../org/springframework/sbm/parsers/SourceFileParser.java | 2 +- .../sbm/parsers/RewriteMavenProjectParserTest.java | 4 ++-- .../sbm/parsers/RewriteProjectParserTest.java | 2 +- 5 files changed, 9 insertions(+), 11 deletions(-) rename sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/{HelperWithoutAGoodName.java => ModuleParser.java} (99%) diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/HelperWithoutAGoodName.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/ModuleParser.java similarity index 99% rename from sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/HelperWithoutAGoodName.java rename to sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/ModuleParser.java index 28f2cdb1d..64c24e27c 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/HelperWithoutAGoodName.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/ModuleParser.java @@ -20,7 +20,6 @@ import org.openrewrite.ExecutionContext; import org.openrewrite.Parser; import org.openrewrite.SourceFile; -import org.openrewrite.Tree; import org.openrewrite.internal.lang.Nullable; import org.openrewrite.java.JavaParser; import org.openrewrite.java.internal.JavaTypeCache; @@ -46,8 +45,7 @@ * @author Fabian Krüger */ @Slf4j -// TODO: 945 ModuleParser ? -public class HelperWithoutAGoodName { +public class ModuleParser { /** * Add {@link Marker}s to {@link SourceFile}. diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteParserConfiguration.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteParserConfiguration.java index e80da062a..5992e0073 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteParserConfiguration.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteParserConfiguration.java @@ -107,13 +107,13 @@ RewriteMavenArtifactDownloader artifactDownloader(MavenArtifactCache mavenArtifa } @Bean - HelperWithoutAGoodName helperWithoutAGoodName() { - return new HelperWithoutAGoodName(); + ModuleParser helperWithoutAGoodName() { + return new ModuleParser(); } @Bean - SourceFileParser sourceFileParser(JavaParserBuilder javaParserBuilder, HelperWithoutAGoodName helperWithoutAGoodName) { - return new SourceFileParser(parserProperties, helperWithoutAGoodName); + SourceFileParser sourceFileParser(JavaParserBuilder javaParserBuilder, ModuleParser moduleParser) { + return new SourceFileParser(parserProperties, moduleParser); } @Bean diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/SourceFileParser.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/SourceFileParser.java index eccdcbd7b..22e0320e3 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/SourceFileParser.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/SourceFileParser.java @@ -41,7 +41,7 @@ public class SourceFileParser { private final ParserProperties parserProperties; - private final HelperWithoutAGoodName mavenMojoProjectParserPrivateMethods; + private final ModuleParser mavenMojoProjectParserPrivateMethods; public List parseOtherSourceFiles( Path baseDir, diff --git a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteMavenProjectParserTest.java b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteMavenProjectParserTest.java index 097668d07..fde9dd2bf 100644 --- a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteMavenProjectParserTest.java +++ b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteMavenProjectParserTest.java @@ -276,13 +276,13 @@ void parseMultiModule1_WithCustomParser() { MavenArtifactCache mavenArtifactCache = new LocalMavenArtifactCache(Paths.get(System.getProperty("user.home"), ".m2", "repository")); @Nullable MavenSettings mavenSettings = null; Consumer onError = (t) -> {throw new RuntimeException(t);}; - HelperWithoutAGoodName helperWithoutAGoodName = new HelperWithoutAGoodName(); + ModuleParser moduleParser = new ModuleParser(); JavaParserBuilder javaParserBuilder = new JavaParserBuilder(); RewriteProjectParser rpp = new RewriteProjectParser( new ProvenanceMarkerFactory(new MavenProvenanceMarkerFactory()), new BuildFileParser(), - new SourceFileParser(parserProperties, helperWithoutAGoodName), + new SourceFileParser(parserProperties, moduleParser), new StyleDetector(), parserProperties, mock(ParsingEventListener.class), diff --git a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteProjectParserTest.java b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteProjectParserTest.java index 32792270b..ba9827d73 100644 --- a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteProjectParserTest.java +++ b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteProjectParserTest.java @@ -101,7 +101,7 @@ void parseSimpleMavenProject(@TempDir Path tempDir) { Consumer onError = (t) -> { throw new RuntimeException(t); }; - HelperWithoutAGoodName mavenMojoParserPrivateMethods = new HelperWithoutAGoodName(); + ModuleParser mavenMojoParserPrivateMethods = new ModuleParser(); ExecutionContext executionContext = new InMemoryExecutionContext(t -> {throw new RuntimeException(t);}); RewriteProjectParser projectParser = new RewriteProjectParser( new ProvenanceMarkerFactory(new MavenProvenanceMarkerFactory()), From f65f1fd137bfdfa421d391bf9e07804b09a86618 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Kr=C3=BCger?= Date: Sat, 30 Sep 2023 19:50:18 +0200 Subject: [PATCH 08/32] Enhance README --- sbm-support-rewrite/README.adoc | 158 +++++++++++++++++++++++++------- 1 file changed, 125 insertions(+), 33 deletions(-) diff --git a/sbm-support-rewrite/README.adoc b/sbm-support-rewrite/README.adoc index 8b32c189a..01762b7b0 100644 --- a/sbm-support-rewrite/README.adoc +++ b/sbm-support-rewrite/README.adoc @@ -1,10 +1,37 @@ # sbm-support-rewrite -these components The `sbm-support-rewrite` project provides Spring beans classes to parse a given project to an OpenRewrite abstract syntax tree (AST) which can then be used to run OpenRewrite recipes that were discovered on the classpath. -- `RewriteProjectParser` - parses a project to OpenRewrite's AST representation -- `RecipeDiscovery` - provides access to discovered recipes +## Components +The following components can be used to parse a project, run recipes and write changes back to the filesystem. +These components are provided as Spring beans and can be injected into other Spring beans that require them. + +_Example: Inject RewriteProjectParser into your Spring bean_ +[source,java] +.... +@Autowired +RewriteProjectParser parser; +.... + +### ProjectScanner +Scan a given path to a list of resources using filter definitions provided as application properties. + +### RewriteProjectParser +Parses a project to OpenRewrite's AST representation. + +### RewriteExecutionContext +OpenRewrite's `ExecutionContext` gets initialized during parsing. +This `ExecutionContext` is required for some recipes and inner workings of OpenRewrite. + +### RecipeDiscovery +Discover OpenRewrite recipes on classpath + +### ProjectResourceSet +Abstraction of OpenRewrite SourceFiles that allows execution of recipes against the SourceFiles while +synchronizing changes with the underlying list of SourceFiles. + +### ProjectResourceSetSerializer +Write back the in-memory changed SourceFiles from the ProjectResourceSet to the filesystem. ## Getting started @@ -36,15 +63,13 @@ Then the dependency can be retrieved. ..... -### Parse a project - -`RewriteProjectParser` is provided as Spring bean and can be injected into components. +### (Optional) Scan a project +`ProjectScanner` scans a given `Path` to a list of ``Resource``s. +It filters out resources and directories matching any of the ignore patterns in +`parser.ignoredPathPatterns`. -[source,java] -..... -@Autowired -private RewriteProjectParser parser; -..... +### Parse a project +`RewriteProjectParser` parses a project to OpenRewrite AST. The provided `parse(Path)` method can be used to parse a project under a given `Path` to OpenRewrite AST. @@ -55,12 +80,11 @@ List ast = parser.parse(baseDir); ..... ### ExecutionContext - -OpenRewrite's `ExecutionContext` is populated during parsing and the settings can be important for recipes executed later. -The `ExecutionContext` is provided as scoped Spring bean. +OpenRewrite's `ExecutionContext` is populated during parsing and the settings might be required for recipes executed later. +The `ExecutionContext` is provided as scoped Spring bean and can be injected into other Spring beans. It has the same scope as the parsing and a new instance is automatically created with every parse. -NOTE: The ExecutionContext should be injected and should not be created programmatically. +NOTE: The ExecutionContext should always be injected and should not be created programmatically. ### Discover and run recipes @@ -78,6 +102,49 @@ Recipe recipe = discovery.getRecipe("org.openrewrite.java.spring.boot3.UpgradeSp RecipeRun recipe = recipe.run(new InMemoryLargeSourceSet(ast), ctx)); .... +### Use ProjectResourceSet +A successful recipe run will return the modified ``SourceFile``s. +Before another recipe can be applied to the AST the changed ``SourceFile``s need to be merged into the original list of ``SourceFile``s (the AST). +The `ProjectResourceSet` provides this capability. + +[source,java] +.... +@Component +public class SomeClass { + + @Autowired + ProjectResourceSetFactory factory; + + @Autowired + RewriteProjectParser parser; + + void method() { + Recipe r1 = ... + Recipe r2 = ... + RewriteProjectParsingResult parsingResult = parser.parse(baseDir); + List sourceFiles = parsingResult.sourceFiles(); + ProjectResourceSet projectResourceSet = factory.create(baseDir, sourceFiles); + projectResourceSet.apply(r1); // internally changes get merged back to AST + projectResourceSet.apply(r2); // r2 applied against the AST with changes from r1 + } +} +.... + +### Write changes back to filesystem +The `ProjectResourceSetSerializer` can be used to write all changes (modify, delete, add) in `ProjectResourceSet` to the filesystem. + +[source,java] +.... +@Autowired +private ProjectResourceSetSerializer serializer; +... +public void method() { + ... + serializer.writeChanges(projectResourceSet); +} +.... + + ### Listen to ParserEvents @@ -177,21 +244,39 @@ Example code showing how to apply OpenRewrite's UpgradeSpringBoot_3_1 recipe [source, java] ..... +/* + * Copyright 2021 - 2023 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; + import org.openrewrite.*; -import org.openrewrite.internal.InMemoryLargeSourceSet; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.CommandLineRunner; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.core.io.Resource; import org.springframework.sbm.parsers.ProjectScanner; -import org.springframework.sbm.parsers.RewriteMavenProjectParser; +import org.springframework.sbm.parsers.RewriteProjectParser; import org.springframework.sbm.parsers.RewriteProjectParsingResult; +import org.springframework.sbm.project.resource.ProjectResourceSet; +import org.springframework.sbm.project.resource.ProjectResourceSetFactory; +import org.springframework.sbm.project.resource.ProjectResourceSetSerializer; import org.springframework.sbm.recipes.RewriteRecipeDiscovery; import java.nio.file.Path; import java.util.List; -import java.util.Set; @SpringBootApplication public class BootUpgrade implements CommandLineRunner { @@ -202,9 +287,13 @@ public class BootUpgrade implements CommandLineRunner { @Autowired ProjectScanner scanner; @Autowired - RewriteMavenProjectParser parser; + RewriteProjectParser parser; @Autowired RewriteRecipeDiscovery discovery; + @Autowired + ProjectResourceSetSerializer serializer; + @Autowired + ProjectResourceSetFactory factory; @Override public void run(String... args) throws Exception { @@ -215,21 +304,24 @@ public class BootUpgrade implements CommandLineRunner { if(!baseDir.toFile().exists() || !baseDir.toFile().isDirectory()) { throw new IllegalArgumentException("Given path '%s' does not exist or is not a directory.".formatted(path)); } - List resources = scanner.scan(baseDir, Set.of("**/.idea/**", "**/.DS_Store", "**/.git/**")); - ExecutionContext ctx = new InMemoryExecutionContext(t -> {throw new RuntimeException(t);}); - RewriteProjectParsingResult parsingResult = parser.parse(baseDir/*, resources*/, ctx); + + // parse + RewriteProjectParsingResult parsingResult = parser.parse(baseDir); + List sourceFiles = parsingResult.sourceFiles(); + + // create ProjectResourceSet + ProjectResourceSet projectResourceSet = factory.create(baseDir, sourceFiles); + + // find recipe String recipeName = "org.openrewrite.java.spring.boot3.UpgradeSpringBoot_3_1"; List recipes = discovery.discoverRecipes(); - recipes.stream() - .filter(r -> recipeName.equals(r.getName())) - .forEach(r -> { - System.out.println("Applying recipe '%s'".formatted(r.getName())); - LargeSourceSet lss = new InMemoryLargeSourceSet(parsingResult.sourceFiles()); - RecipeRun recipeRun = r.run(lss, ctx); - recipeRun.getChangeset().getAllResults().stream() - .map(Result::diff) - .forEach(System.out::println); - }); + Recipe recipe = findRecipe(recipes, recipeName); + + // apply recipe + projectResourceSet.apply(recipe); + + // write changes to fs + serializer.writeChanges(projectResourceSet); } } ..... \ No newline at end of file From 6c89ffa4bc03f22a0a64911f8a6cc8892f487a10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Kr=C3=BCger?= Date: Sat, 30 Sep 2023 19:55:25 +0200 Subject: [PATCH 09/32] Enhance README --- sbm-support-rewrite/README.adoc | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/sbm-support-rewrite/README.adoc b/sbm-support-rewrite/README.adoc index 01762b7b0..69ee28662 100644 --- a/sbm-support-rewrite/README.adoc +++ b/sbm-support-rewrite/README.adoc @@ -244,23 +244,7 @@ Example code showing how to apply OpenRewrite's UpgradeSpringBoot_3_1 recipe [source, java] ..... -/* - * Copyright 2021 - 2023 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; +package com.example; import org.openrewrite.*; import org.springframework.beans.factory.annotation.Autowired; From 9c8e14b39e76bb9ad509c4257f62bbc3f8217da3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Kr=C3=BCger?= Date: Sat, 30 Sep 2023 20:04:21 +0200 Subject: [PATCH 10/32] Moved Maven related classes to maven package --- .../parsers/RewriteParserConfiguration.java | 1 + .../sbm/parsers/RewriteProjectParser.java | 8 +-- .../sbm/parsers/SbmMavenProject.java | 1 + .../sbm/parsers/StyleDetector.java | 2 +- .../parsers/{ => maven}/BuildFileParser.java | 3 +- .../{ => maven}/MavenConfigFileParser.java | 2 +- .../parsers/{ => maven}/MavenModelReader.java | 2 +- .../{ => maven}/MavenPasswordDecrypter.java | 2 +- .../{ => maven}/MavenProjectAnalyzer.java | 4 +- .../MavenProvenanceMarkerFactory.java | 3 +- .../{ => maven}/MavenRuntimeInformation.java | 2 +- .../{ => maven}/ProvenanceMarkerFactory.java | 7 +- .../sbm/parsers/BuildFileParserTest.java | 8 +-- .../MavenMojoProjectParserPrivateMethods.java | 64 ------------------- .../RewriteProjectParserIntegrationTest.java | 10 +-- .../sbm/parsers/RewriteProjectParserTest.java | 17 ++--- .../MavenConfigFileParserTest.java | 3 +- .../MavenExecutionRequestFactory.java | 5 +- .../MavenExecutionResultException.java | 2 +- .../parsers/{ => maven}/MavenExecutor.java | 3 +- .../{ => maven}/MavenExecutorTest.java | 2 +- .../MavenMojoProjectParserFactory.java | 5 +- .../MavenMojoProjectParserPrivateMethods.java | 34 ++++++++++ .../{ => maven}/MavenPlexusContainer.java | 2 +- .../{ => maven}/MavenPomCacheTest.java | 2 +- .../{ => maven}/MavenProjectAnalyzerTest.java | 7 +- .../ProvenanceMarkerFactoryTest.java | 6 +- .../RewriteMavenProjectParser.java | 3 +- ...riteMavenProjectParserIntegrationTest.java | 4 +- .../RewriteMavenProjectParserTest.java | 3 +- .../SbmMavenProjectResolutionTest.java | 6 +- .../{ => maven}/SbmTestConfiguration.java | 5 +- 32 files changed, 101 insertions(+), 127 deletions(-) rename sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/{ => maven}/BuildFileParser.java (99%) rename sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/{ => maven}/MavenConfigFileParser.java (99%) rename sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/{ => maven}/MavenModelReader.java (96%) rename sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/{ => maven}/MavenPasswordDecrypter.java (98%) rename sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/{ => maven}/MavenProjectAnalyzer.java (98%) rename sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/{ => maven}/MavenProvenanceMarkerFactory.java (98%) rename sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/{ => maven}/MavenRuntimeInformation.java (94%) rename sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/{ => maven}/ProvenanceMarkerFactory.java (87%) delete mode 100644 sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/MavenMojoProjectParserPrivateMethods.java rename sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/{ => maven}/MavenConfigFileParserTest.java (94%) rename sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/{ => maven}/MavenExecutionRequestFactory.java (97%) rename sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/{ => maven}/MavenExecutionResultException.java (96%) rename sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/{ => maven}/MavenExecutor.java (97%) rename sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/{ => maven}/MavenExecutorTest.java (97%) rename sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/{ => maven}/MavenMojoProjectParserFactory.java (95%) create mode 100644 sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenMojoProjectParserPrivateMethods.java rename sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/{ => maven}/MavenPlexusContainer.java (98%) rename sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/{ => maven}/MavenPomCacheTest.java (99%) rename sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/{ => maven}/MavenProjectAnalyzerTest.java (99%) rename sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/{ => maven}/ProvenanceMarkerFactoryTest.java (98%) rename sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/{ => maven}/RewriteMavenProjectParser.java (98%) rename sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/{ => maven}/RewriteMavenProjectParserIntegrationTest.java (95%) rename sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/{ => maven}/RewriteMavenProjectParserTest.java (99%) rename sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/{ => maven}/SbmMavenProjectResolutionTest.java (96%) rename sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/{ => maven}/SbmTestConfiguration.java (93%) diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteParserConfiguration.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteParserConfiguration.java index 5992e0073..7f8a97b13 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteParserConfiguration.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteParserConfiguration.java @@ -30,6 +30,7 @@ import org.springframework.context.annotation.Import; import org.springframework.sbm.boot.autoconfigure.ParserPropertiesPostProcessor; import org.springframework.sbm.parsers.events.RewriteParsingEventListenerAdapter; +import org.springframework.sbm.parsers.maven.*; import org.springframework.sbm.project.resource.SbmApplicationProperties; import org.springframework.sbm.scopes.ProjectMetadata; import org.springframework.sbm.scopes.ScanScope; diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteProjectParser.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteProjectParser.java index 1a4881906..167c2a7e0 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteProjectParser.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteProjectParser.java @@ -32,16 +32,14 @@ import org.springframework.core.io.Resource; import org.springframework.sbm.parsers.events.SuccessfullyParsedProjectEvent; import org.springframework.sbm.parsers.events.StartedParsingProjectEvent; +import org.springframework.sbm.parsers.maven.BuildFileParser; +import org.springframework.sbm.parsers.maven.MavenProjectAnalyzer; +import org.springframework.sbm.parsers.maven.ProvenanceMarkerFactory; import org.springframework.sbm.scopes.ScanScope; import org.springframework.sbm.utils.ResourceUtil; -import org.springframework.util.ReflectionUtils; -import java.lang.reflect.Method; import java.nio.file.Path; import java.util.*; -import java.util.function.Consumer; -import java.util.stream.Collectors; -import java.util.stream.Stream; /** * Project parser parsing resources under a given {@link Path} to OpenRewrite abstract syntax tree. diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/SbmMavenProject.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/SbmMavenProject.java index 0debaebb9..9776379f4 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/SbmMavenProject.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/SbmMavenProject.java @@ -24,6 +24,7 @@ import org.openrewrite.maven.tree.*; import org.openrewrite.maven.utilities.MavenArtifactDownloader; import org.springframework.core.io.Resource; +import org.springframework.sbm.parsers.maven.MavenRuntimeInformation; import org.springframework.sbm.utils.ResourceUtil; import java.io.File; diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/StyleDetector.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/StyleDetector.java index fd38c5383..d0b54d4c1 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/StyleDetector.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/StyleDetector.java @@ -35,7 +35,7 @@ * @author Fabian Krüger */ -class StyleDetector { +public class StyleDetector { List sourcesWithAutoDetectedStyles(Stream sourceFiles) { org.openrewrite.java.style.Autodetect.Detector javaDetector = org.openrewrite.java.style.Autodetect.detector(); diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/BuildFileParser.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/BuildFileParser.java similarity index 99% rename from sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/BuildFileParser.java rename to sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/BuildFileParser.java index cd11195b4..08151f06f 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/BuildFileParser.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/BuildFileParser.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.sbm.parsers; +package org.springframework.sbm.parsers.maven; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -42,6 +42,7 @@ */ @Slf4j @RequiredArgsConstructor +public class BuildFileParser { /** diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/MavenConfigFileParser.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/MavenConfigFileParser.java similarity index 99% rename from sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/MavenConfigFileParser.java rename to sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/MavenConfigFileParser.java index 74f54743c..b3d03861f 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/MavenConfigFileParser.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/MavenConfigFileParser.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.sbm.parsers; +package org.springframework.sbm.parsers.maven; import org.apache.commons.cli.*; import org.apache.maven.cli.CleanArgument; diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/MavenModelReader.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/MavenModelReader.java similarity index 96% rename from sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/MavenModelReader.java rename to sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/MavenModelReader.java index 269e5652d..fe15c3da9 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/MavenModelReader.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/MavenModelReader.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.sbm.parsers; +package org.springframework.sbm.parsers.maven; import org.apache.maven.model.Model; import org.apache.maven.model.io.xpp3.MavenXpp3Reader; diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/MavenPasswordDecrypter.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/MavenPasswordDecrypter.java similarity index 98% rename from sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/MavenPasswordDecrypter.java rename to sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/MavenPasswordDecrypter.java index 103314082..de7ff382d 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/MavenPasswordDecrypter.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/MavenPasswordDecrypter.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.sbm.parsers; +package org.springframework.sbm.parsers.maven; import lombok.RequiredArgsConstructor; import org.openrewrite.maven.MavenSettings; diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/MavenProjectAnalyzer.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/MavenProjectAnalyzer.java similarity index 98% rename from sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/MavenProjectAnalyzer.java rename to sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/MavenProjectAnalyzer.java index bf8da395a..ee22d889a 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/MavenProjectAnalyzer.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/MavenProjectAnalyzer.java @@ -13,13 +13,15 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.sbm.parsers; +package org.springframework.sbm.parsers.maven; import org.apache.maven.model.*; import org.apache.maven.model.io.xpp3.MavenXpp3Reader; import org.codehaus.plexus.util.xml.pull.XmlPullParserException; import org.openrewrite.maven.utilities.MavenArtifactDownloader; import org.springframework.core.io.Resource; +import org.springframework.sbm.parsers.ParserContext; +import org.springframework.sbm.parsers.SbmMavenProject; import org.springframework.sbm.utils.ResourceUtil; import java.io.File; diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/MavenProvenanceMarkerFactory.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/MavenProvenanceMarkerFactory.java similarity index 98% rename from sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/MavenProvenanceMarkerFactory.java rename to sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/MavenProvenanceMarkerFactory.java index 13b20c9d0..6f75d29e3 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/MavenProvenanceMarkerFactory.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/MavenProvenanceMarkerFactory.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.sbm.parsers; +package org.springframework.sbm.parsers.maven; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -26,6 +26,7 @@ import org.openrewrite.java.marker.JavaVersion; import org.openrewrite.marker.*; import org.openrewrite.marker.ci.BuildEnvironment; +import org.springframework.sbm.parsers.SbmMavenProject; import java.nio.file.Path; import java.util.List; diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/MavenRuntimeInformation.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/MavenRuntimeInformation.java similarity index 94% rename from sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/MavenRuntimeInformation.java rename to sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/MavenRuntimeInformation.java index e53792103..7aaaf9ba1 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/MavenRuntimeInformation.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/MavenRuntimeInformation.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.sbm.parsers; +package org.springframework.sbm.parsers.maven; /** * @author Fabian Krüger diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/ProvenanceMarkerFactory.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/ProvenanceMarkerFactory.java similarity index 87% rename from sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/ProvenanceMarkerFactory.java rename to sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/ProvenanceMarkerFactory.java index 5fbaebaf6..911000ce6 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/ProvenanceMarkerFactory.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/ProvenanceMarkerFactory.java @@ -13,11 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.sbm.parsers; +package org.springframework.sbm.parsers.maven; import lombok.RequiredArgsConstructor; +import org.apache.maven.project.MavenProject; import org.openrewrite.marker.Marker; import org.springframework.core.io.Resource; +import org.springframework.sbm.parsers.ParserContext; +import org.springframework.sbm.parsers.maven.MavenProvenanceMarkerFactory; import org.springframework.sbm.utils.ResourceUtil; import java.nio.file.Path; @@ -27,7 +30,7 @@ * @author Fabian Krüger */ @RequiredArgsConstructor -class ProvenanceMarkerFactory { +public class ProvenanceMarkerFactory { private final MavenProvenanceMarkerFactory markerFactory; diff --git a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/BuildFileParserTest.java b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/BuildFileParserTest.java index 197436dd8..588db0d29 100644 --- a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/BuildFileParserTest.java +++ b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/BuildFileParserTest.java @@ -15,8 +15,6 @@ */ package org.springframework.sbm.parsers; -import org.apache.commons.cli.*; -import org.apache.maven.cli.CleanArgument; import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; @@ -25,16 +23,13 @@ import org.openrewrite.InMemoryExecutionContext; import org.openrewrite.java.marker.JavaProject; import org.openrewrite.marker.Marker; -import org.openrewrite.maven.MavenExecutionContextView; -import org.openrewrite.maven.cache.InMemoryMavenPomCache; -import org.openrewrite.maven.tree.*; import org.openrewrite.xml.tree.Xml; import org.springframework.core.io.Resource; +import org.springframework.sbm.parsers.maven.BuildFileParser; import org.springframework.sbm.test.util.DummyResource; import org.springframework.sbm.utils.ResourceUtil; import java.nio.file.Path; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; @@ -42,7 +37,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; /** * @author Fabian Krüger diff --git a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/MavenMojoProjectParserPrivateMethods.java b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/MavenMojoProjectParserPrivateMethods.java deleted file mode 100644 index 7eadc5a1a..000000000 --- a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/MavenMojoProjectParserPrivateMethods.java +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright 2021 - 2023 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.parsers; - -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.apache.maven.rtinfo.internal.DefaultRuntimeInformation; -import org.apache.maven.settings.crypto.DefaultSettingsDecrypter; -import org.jetbrains.annotations.NotNull; -import org.openrewrite.ExecutionContext; -import org.openrewrite.Parser; -import org.openrewrite.SourceFile; -import org.openrewrite.Tree; -import org.openrewrite.internal.lang.Nullable; -import org.openrewrite.java.JavaParser; -import org.openrewrite.java.internal.JavaTypeCache; -import org.openrewrite.java.marker.JavaSourceSet; -import org.openrewrite.marker.Generated; -import org.openrewrite.marker.Marker; -import org.openrewrite.marker.Markers; -import org.openrewrite.maven.MavenMojoProjectParser; -import org.openrewrite.maven.ResourceParser; -import org.openrewrite.maven.tree.ResolvedDependency; -import org.openrewrite.maven.utilities.MavenArtifactDownloader; -import org.openrewrite.xml.tree.Xml; -import org.sonatype.plexus.components.cipher.DefaultPlexusCipher; -import org.sonatype.plexus.components.cipher.PlexusCipherException; -import org.sonatype.plexus.components.sec.dispatcher.DefaultSecDispatcher; -import org.springframework.core.io.Resource; -import org.springframework.sbm.utils.ResourceUtil; - -import java.nio.file.*; -import java.util.*; -import java.util.function.Predicate; -import java.util.function.UnaryOperator; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -/** - * @author Fabian Krüger - */ -@Slf4j -@RequiredArgsConstructor -class MavenMojoProjectParserPrivateMethods { - - private final MavenMojoProjectParserFactory mavenMojoProjectParserFactory; - private final MavenArtifactDownloader artifactDownloader; - - - -} diff --git a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteProjectParserIntegrationTest.java b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteProjectParserIntegrationTest.java index b2aa8f7d6..0f9da7690 100644 --- a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteProjectParserIntegrationTest.java +++ b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteProjectParserIntegrationTest.java @@ -15,25 +15,19 @@ */ package org.springframework.sbm.parsers; -import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.openrewrite.InMemoryExecutionContext; import org.openrewrite.java.tree.J; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.context.TestConfiguration; import org.springframework.core.io.Resource; import org.springframework.sbm.boot.autoconfigure.SbmSupportRewriteConfiguration; -import org.springframework.sbm.boot.autoconfigure.ScannerConfiguration; -import org.springframework.sbm.parsers.events.FinishedParsingResourceEvent; -import org.springframework.sbm.parsers.events.StartedParsingProjectEvent; -import org.springframework.sbm.parsers.events.SuccessfullyParsedProjectEvent; -import org.springframework.sbm.boot.autoconfigure.ScannerConfiguration; +import org.springframework.sbm.parsers.maven.RewriteMavenProjectParser; +import org.springframework.sbm.parsers.maven.SbmTestConfiguration; import org.springframework.sbm.test.util.TestProjectHelper; import java.nio.file.Path; -import java.util.ArrayList; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; diff --git a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteProjectParserTest.java b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteProjectParserTest.java index ba9827d73..9992e5cd0 100644 --- a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteProjectParserTest.java +++ b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteProjectParserTest.java @@ -23,25 +23,23 @@ import org.openrewrite.InMemoryExecutionContext; import org.openrewrite.Parser; import org.openrewrite.SourceFile; -import org.openrewrite.internal.lang.Nullable; -import org.openrewrite.maven.MavenSettings; -import org.openrewrite.maven.cache.LocalMavenArtifactCache; -import org.openrewrite.maven.cache.MavenArtifactCache; import org.openrewrite.tree.ParsingEventListener; import org.openrewrite.tree.ParsingExecutionContextView; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.context.ApplicationEventPublisher; import org.springframework.core.io.DefaultResourceLoader; import org.springframework.core.io.Resource; +import org.springframework.sbm.parsers.maven.BuildFileParser; +import org.springframework.sbm.parsers.maven.MavenProjectAnalyzer; +import org.springframework.sbm.parsers.maven.MavenProvenanceMarkerFactory; +import org.springframework.sbm.parsers.maven.ProvenanceMarkerFactory; import org.springframework.sbm.scopes.ScanScope; import org.springframework.sbm.test.util.DummyResource; import org.springframework.sbm.utils.ResourceUtil; import java.nio.file.Path; -import java.nio.file.Paths; import java.util.ArrayList; import java.util.List; -import java.util.function.Consumer; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; @@ -94,13 +92,6 @@ public static void main(String[] args){ void parseSimpleMavenProject(@TempDir Path tempDir) { Path basePath = tempDir; ParserProperties parserProperties = new ParserProperties(); - MavenModelReader mavenModelReader = new MavenModelReader(); - MavenMojoProjectParserFactory mavenMojoProjectParserFactory = new MavenMojoProjectParserFactory(parserProperties); - MavenArtifactCache mavenArtifactCache = new LocalMavenArtifactCache(Paths.get(System.getProperty("user.home"), ".m2", "repository")); - @Nullable MavenSettings mavenSettings = null; - Consumer onError = (t) -> { - throw new RuntimeException(t); - }; ModuleParser mavenMojoParserPrivateMethods = new ModuleParser(); ExecutionContext executionContext = new InMemoryExecutionContext(t -> {throw new RuntimeException(t);}); RewriteProjectParser projectParser = new RewriteProjectParser( diff --git a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/MavenConfigFileParserTest.java b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenConfigFileParserTest.java similarity index 94% rename from sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/MavenConfigFileParserTest.java rename to sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenConfigFileParserTest.java index 11b63a375..51eb014a5 100644 --- a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/MavenConfigFileParserTest.java +++ b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenConfigFileParserTest.java @@ -13,10 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.sbm.parsers; +package org.springframework.sbm.parsers.maven; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import org.springframework.sbm.parsers.maven.MavenConfigFileParser; import java.nio.file.Path; import java.util.List; diff --git a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/MavenExecutionRequestFactory.java b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenExecutionRequestFactory.java similarity index 97% rename from sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/MavenExecutionRequestFactory.java rename to sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenExecutionRequestFactory.java index 988591c60..3d99c880c 100644 --- a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/MavenExecutionRequestFactory.java +++ b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenExecutionRequestFactory.java @@ -13,9 +13,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.sbm.parsers; +package org.springframework.sbm.parsers.maven; -import org.sonatype.plexus.components.sec.dispatcher.SecDispatcher; import lombok.RequiredArgsConstructor; import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.artifact.repository.ArtifactRepositoryFactory; @@ -27,7 +26,7 @@ import org.apache.maven.repository.UserLocalArtifactRepository; import org.codehaus.plexus.PlexusContainer; import org.codehaus.plexus.component.repository.exception.ComponentLookupException; -import org.springframework.stereotype.Component; +import org.springframework.sbm.parsers.maven.MavenConfigFileParser; import java.nio.file.Path; import java.util.List; diff --git a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/MavenExecutionResultException.java b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenExecutionResultException.java similarity index 96% rename from sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/MavenExecutionResultException.java rename to sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenExecutionResultException.java index 111287199..bbc9b21d7 100644 --- a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/MavenExecutionResultException.java +++ b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenExecutionResultException.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.sbm.parsers; +package org.springframework.sbm.parsers.maven; import lombok.Getter; import org.apache.commons.lang3.exception.ExceptionUtils; diff --git a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/MavenExecutor.java b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenExecutor.java similarity index 97% rename from sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/MavenExecutor.java rename to sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenExecutor.java index f5cdaee33..fc30ec96d 100644 --- a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/MavenExecutor.java +++ b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenExecutor.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.sbm.parsers; +package org.springframework.sbm.parsers.maven; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -22,7 +22,6 @@ import org.apache.maven.project.MavenProject; import org.codehaus.plexus.PlexusContainer; import org.codehaus.plexus.component.repository.exception.ComponentLookupException; -import org.springframework.sbm.parsers.MavenExecutionRequestFactory; import java.nio.file.Path; import java.util.List; diff --git a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/MavenExecutorTest.java b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenExecutorTest.java similarity index 97% rename from sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/MavenExecutorTest.java rename to sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenExecutorTest.java index f187455ea..3cc7da1ed 100644 --- a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/MavenExecutorTest.java +++ b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenExecutorTest.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.sbm.parsers; +package org.springframework.sbm.parsers.maven; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; diff --git a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/MavenMojoProjectParserFactory.java b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenMojoProjectParserFactory.java similarity index 95% rename from sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/MavenMojoProjectParserFactory.java rename to sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenMojoProjectParserFactory.java index fec162d79..e58442353 100644 --- a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/MavenMojoProjectParserFactory.java +++ b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenMojoProjectParserFactory.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.sbm.parsers; +package org.springframework.sbm.parsers.maven; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -25,6 +25,8 @@ import org.codehaus.plexus.PlexusContainer; import org.jetbrains.annotations.NotNull; import org.openrewrite.maven.MavenMojoProjectParser; +import org.springframework.sbm.parsers.ParserProperties; +import org.springframework.sbm.parsers.Slf4jToMavenLoggerAdapter; import java.nio.file.Path; import java.util.Collection; @@ -35,6 +37,7 @@ */ @Slf4j @RequiredArgsConstructor +public class MavenMojoProjectParserFactory { private final ParserProperties parserProperties; diff --git a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenMojoProjectParserPrivateMethods.java b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenMojoProjectParserPrivateMethods.java new file mode 100644 index 000000000..1237d34ce --- /dev/null +++ b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenMojoProjectParserPrivateMethods.java @@ -0,0 +1,34 @@ +/* + * Copyright 2021 - 2023 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.parsers.maven; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.openrewrite.maven.utilities.MavenArtifactDownloader; + +/** + * @author Fabian Krüger + */ +@Slf4j +@RequiredArgsConstructor +class MavenMojoProjectParserPrivateMethods { + + private final MavenMojoProjectParserFactory mavenMojoProjectParserFactory; + private final MavenArtifactDownloader artifactDownloader; + + + +} diff --git a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/MavenPlexusContainer.java b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenPlexusContainer.java similarity index 98% rename from sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/MavenPlexusContainer.java rename to sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenPlexusContainer.java index 962cf3c81..294d0a392 100644 --- a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/MavenPlexusContainer.java +++ b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenPlexusContainer.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.sbm.parsers; +package org.springframework.sbm.parsers.maven; import org.codehaus.plexus.*; import org.codehaus.plexus.classworlds.ClassWorld; diff --git a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/MavenPomCacheTest.java b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenPomCacheTest.java similarity index 99% rename from sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/MavenPomCacheTest.java rename to sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenPomCacheTest.java index de9de8713..77fb7127f 100644 --- a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/MavenPomCacheTest.java +++ b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenPomCacheTest.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.sbm.parsers; +package org.springframework.sbm.parsers.maven; import org.junit.jupiter.api.*; import org.junitpioneer.jupiter.SetSystemProperty; diff --git a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/MavenProjectAnalyzerTest.java b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenProjectAnalyzerTest.java similarity index 99% rename from sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/MavenProjectAnalyzerTest.java rename to sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenProjectAnalyzerTest.java index 638de9420..1e86074f6 100644 --- a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/MavenProjectAnalyzerTest.java +++ b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenProjectAnalyzerTest.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package org.springframework.sbm.parsers; +package org.springframework.sbm.parsers.maven; import org.apache.maven.execution.MavenSession; import org.apache.maven.project.MavenProject; @@ -24,8 +24,11 @@ import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; +import org.mockito.Mockito; import org.openrewrite.maven.utilities.MavenArtifactDownloader; import org.springframework.core.io.Resource; +import org.springframework.sbm.parsers.RewriteMavenArtifactDownloader; +import org.springframework.sbm.parsers.SbmMavenProject; import org.springframework.sbm.test.util.DummyResource; import org.springframework.sbm.utils.ResourceUtil; @@ -47,7 +50,7 @@ class MavenProjectAnalyzerTest { @BeforeEach void beforeEach() { - MavenArtifactDownloader rewriteMavenArtifactDownloader = mock(RewriteMavenArtifactDownloader.class); + MavenArtifactDownloader rewriteMavenArtifactDownloader = Mockito.mock(RewriteMavenArtifactDownloader.class); sut = new MavenProjectAnalyzer(rewriteMavenArtifactDownloader); } diff --git a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/ProvenanceMarkerFactoryTest.java b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/ProvenanceMarkerFactoryTest.java similarity index 98% rename from sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/ProvenanceMarkerFactoryTest.java rename to sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/ProvenanceMarkerFactoryTest.java index 56a2e74d0..5cac0599b 100644 --- a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/ProvenanceMarkerFactoryTest.java +++ b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/ProvenanceMarkerFactoryTest.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.sbm.parsers; +package org.springframework.sbm.parsers.maven; import org.apache.maven.plugin.logging.Log; import org.apache.maven.project.MavenProject; @@ -37,6 +37,10 @@ import org.openrewrite.shaded.jgit.lib.Repository; import org.openrewrite.shaded.jgit.storage.file.FileRepositoryBuilder; import org.springframework.core.io.Resource; +import org.springframework.sbm.parsers.ParserContext; +import org.springframework.sbm.parsers.ParserProperties; +import org.springframework.sbm.parsers.SbmMavenProject; +import org.springframework.sbm.parsers.maven.*; import org.springframework.sbm.test.util.DummyResource; import org.springframework.sbm.utils.ResourceUtil; diff --git a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteMavenProjectParser.java b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/RewriteMavenProjectParser.java similarity index 98% rename from sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteMavenProjectParser.java rename to sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/RewriteMavenProjectParser.java index 8aef5ca93..60bd0d3b7 100644 --- a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteMavenProjectParser.java +++ b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/RewriteMavenProjectParser.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.sbm.parsers; +package org.springframework.sbm.parsers.maven; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -35,6 +35,7 @@ import org.openrewrite.xml.tree.Xml; import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.core.io.Resource; +import org.springframework.sbm.parsers.RewriteProjectParsingResult; import org.springframework.sbm.scopes.ScanScope; import java.nio.file.Path; diff --git a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteMavenProjectParserIntegrationTest.java b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/RewriteMavenProjectParserIntegrationTest.java similarity index 95% rename from sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteMavenProjectParserIntegrationTest.java rename to sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/RewriteMavenProjectParserIntegrationTest.java index b9531e261..6445a1a4f 100644 --- a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteMavenProjectParserIntegrationTest.java +++ b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/RewriteMavenProjectParserIntegrationTest.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.sbm.parsers; +package org.springframework.sbm.parsers.maven; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; @@ -23,7 +23,7 @@ import org.springframework.boot.test.context.TestConfiguration; import org.springframework.context.event.EventListener; import org.springframework.sbm.boot.autoconfigure.SbmSupportRewriteConfiguration; -import org.springframework.sbm.boot.autoconfigure.ScannerConfiguration; +import org.springframework.sbm.parsers.RewriteProjectParsingResult; import org.springframework.sbm.parsers.events.FinishedParsingResourceEvent; import java.nio.file.Path; diff --git a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteMavenProjectParserTest.java b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/RewriteMavenProjectParserTest.java similarity index 99% rename from sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteMavenProjectParserTest.java rename to sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/RewriteMavenProjectParserTest.java index fde9dd2bf..bafd95724 100644 --- a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteMavenProjectParserTest.java +++ b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/RewriteMavenProjectParserTest.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.sbm.parsers; +package org.springframework.sbm.parsers.maven; import org.intellij.lang.annotations.Language; import org.jetbrains.annotations.Nullable; @@ -54,6 +54,7 @@ import org.springframework.core.io.DefaultResourceLoader; import org.springframework.core.io.FileSystemResourceLoader; import org.springframework.core.io.Resource; +import org.springframework.sbm.parsers.*; import org.springframework.sbm.parsers.events.RewriteParsingEventListenerAdapter; import org.springframework.sbm.scopes.ScanScope; import org.springframework.sbm.test.util.DummyResource; diff --git a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/SbmMavenProjectResolutionTest.java b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/SbmMavenProjectResolutionTest.java similarity index 96% rename from sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/SbmMavenProjectResolutionTest.java rename to sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/SbmMavenProjectResolutionTest.java index 3e160e037..dcfcfc45c 100644 --- a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/SbmMavenProjectResolutionTest.java +++ b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/SbmMavenProjectResolutionTest.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.sbm.parsers; +package org.springframework.sbm.parsers.maven; import org.apache.maven.artifact.DependencyResolutionRequiredException; import org.apache.maven.project.MavenProject; @@ -21,6 +21,10 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; +import org.springframework.sbm.parsers.maven.MavenConfigFileParser; +import org.springframework.sbm.parsers.maven.MavenExecutionRequestFactory; +import org.springframework.sbm.parsers.maven.MavenExecutor; +import org.springframework.sbm.parsers.maven.MavenPlexusContainer; import java.nio.file.Files; import java.nio.file.Path; diff --git a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/SbmTestConfiguration.java b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/SbmTestConfiguration.java similarity index 93% rename from sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/SbmTestConfiguration.java rename to sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/SbmTestConfiguration.java index c1b2ad37d..e7586026c 100644 --- a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/SbmTestConfiguration.java +++ b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/SbmTestConfiguration.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.springframework.sbm.parsers; +package org.springframework.sbm.parsers.maven; import lombok.extern.slf4j.Slf4j; import org.openrewrite.ExecutionContext; @@ -24,6 +24,9 @@ import org.springframework.boot.test.context.TestConfiguration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Import; +import org.springframework.sbm.parsers.ParserProperties; +import org.springframework.sbm.parsers.RewriteParserConfiguration; +import org.springframework.sbm.parsers.maven.*; import org.springframework.sbm.scopes.ScanScope; import static org.mockito.Mockito.mock; From 2b475965fd6ae9be6147382f80154d9a974b1acb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Kr=C3=BCger?= Date: Sat, 30 Sep 2023 20:21:36 +0200 Subject: [PATCH 11/32] Add javadoc --- .../sbm/parsers/RewriteProjectParser.java | 20 ++++--------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteProjectParser.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteProjectParser.java index 167c2a7e0..f1e499f0a 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteProjectParser.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteProjectParser.java @@ -42,7 +42,7 @@ import java.util.*; /** - * Project parser parsing resources under a given {@link Path} to OpenRewrite abstract syntax tree. + * Project parser parsing resources under a given {@link Path} to OpenRewrite abstract syntax tree (AST). * The implementation aims to produce the exact same result as the build tool plugins provided by OpenRewrite. * The AST is provided as {@code List<}{@link SourceFile}{@code >}. * @@ -82,6 +82,9 @@ public class RewriteProjectParser { private final MavenProjectAnalyzer mavenProjectAnalyzer; + /** + * Parse the given {@code baseDir} to OpenRewrite AST. + */ public RewriteProjectParsingResult parse(Path baseDir) { List resources = scanner.scan(baseDir); return this.parse(baseDir, resources, executionContext); @@ -89,21 +92,6 @@ public RewriteProjectParsingResult parse(Path baseDir) { /** * Parse given {@link Resource}s in {@code baseDir} to OpenRewrite AST representation. - *

- * extract all poms from list of resources - * sort the list of poms - * parse all poms - * - create marker - generateProvenance() - * Read java version from pom.xml, also checks maven-compiler-plugin settings. - * Adds markers: BuildEnvironment, GitProvenance, BuildTool, OperatingSystemProvenance, JavaVersion, JavaProject - * - Parse Maven files - parseMaven() - * * parse source files - * - listSourceFiles() - * Extract source-encoding from poms - * Create JavaParser with logging and styles - * Parse resources - * processMainSources() - * processTestSources() */ public RewriteProjectParsingResult parse(Path givenBaseDir, List resources, ExecutionContext executionContext) { scanScope.clear(beanFactory); From 835daab328572f9d20096095999ed11762ad4223 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Kr=C3=BCger?= Date: Sat, 30 Sep 2023 20:21:39 +0200 Subject: [PATCH 12/32] Add TODO --- .../org/springframework/sbm/parsers/RewriteProjectParser.java | 1 + 1 file changed, 1 insertion(+) diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteProjectParser.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteProjectParser.java index f1e499f0a..af66bc617 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteProjectParser.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteProjectParser.java @@ -120,6 +120,7 @@ public RewriteProjectParsingResult parse(Path givenBaseDir, List resou Map> provenanceMarkers = provenanceMarkerFactory.generateProvenanceMarkers(baseDir, parserContext); // 127: parse build files + // TODO: 945 this map is only used to lookup module pom by path in SourceFileParser. If possible provide the build file from ParserContext and remove this map. Map resourceToDocumentMap = buildFileParser.parseBuildFiles(baseDir, parserContext.getBuildFileResources(), parserContext.getActiveProfiles(), executionContext, parserProperties.isSkipMavenParsing(), provenanceMarkers); List parsedAndSortedBuildFileDocuments = parserContext.getBuildFileResources().stream() From 65ad6e9ae9eb63235c1ba7ff3ec826f7e513d954 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Kr=C3=BCger?= Date: Sat, 30 Sep 2023 20:21:41 +0200 Subject: [PATCH 13/32] Cleanup --- .../org/springframework/sbm/parsers/RewriteProjectParser.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteProjectParser.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteProjectParser.java index af66bc617..d27c984f7 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteProjectParser.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteProjectParser.java @@ -95,11 +95,8 @@ public RewriteProjectParsingResult parse(Path baseDir) { */ public RewriteProjectParsingResult parse(Path givenBaseDir, List resources, ExecutionContext executionContext) { scanScope.clear(beanFactory); - final Path baseDir = normalizePath(givenBaseDir); - // FIXME: ... WARN 30694 --- [ main] .m.p.i.DeprecatedCoreExpressionValidator : Parameter 'local' is deprecated core expression; Avoid use of ArtifactRepository type. If you need access to local repository, switch to '${repositorySystemSession}' expression and get LRM from it instead. - MavenExecutionContextView.view(executionContext).setLocalRepository(new MavenRepository("local", "file://" + Path.of(System.getProperty("user.home")).resolve(".m2/repository"), null, null, false, null, null, null)); eventPublisher.publishEvent(new StartedParsingProjectEvent(resources)); ParsingExecutionContextView.view(executionContext).setParsingListener(parsingEventListener); From fb45c1e6cd8b67de7b657f247aef05872d7edc7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Kr=C3=BCger?= Date: Sat, 30 Sep 2023 20:21:44 +0200 Subject: [PATCH 14/32] Remove dead code --- .../sbm/parsers/maven/RewriteMavenProjectParserTest.java | 7 ------- 1 file changed, 7 deletions(-) diff --git a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/RewriteMavenProjectParserTest.java b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/RewriteMavenProjectParserTest.java index bafd95724..97b5de4aa 100644 --- a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/RewriteMavenProjectParserTest.java +++ b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/RewriteMavenProjectParserTest.java @@ -271,15 +271,8 @@ void parseMultiModule1_withIntegratedParser() { @Test void parseMultiModule1_WithCustomParser() { Path baseDir = getMavenProject("multi-module-1"); - ExecutionContext ctx; - ctx = new InMemoryExecutionContext(t -> t.printStackTrace()); - MavenMojoProjectParserFactory mavenMojoProjectParserFactory = new MavenMojoProjectParserFactory(parserProperties); - MavenArtifactCache mavenArtifactCache = new LocalMavenArtifactCache(Paths.get(System.getProperty("user.home"), ".m2", "repository")); - @Nullable MavenSettings mavenSettings = null; - Consumer onError = (t) -> {throw new RuntimeException(t);}; ModuleParser moduleParser = new ModuleParser(); - JavaParserBuilder javaParserBuilder = new JavaParserBuilder(); RewriteProjectParser rpp = new RewriteProjectParser( new ProvenanceMarkerFactory(new MavenProvenanceMarkerFactory()), new BuildFileParser(), From 3ffd1375d200f6ac2626009cd62fc497ce4cf241 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Kr=C3=BCger?= Date: Sat, 30 Sep 2023 20:21:48 +0200 Subject: [PATCH 15/32] Remove ExecutionContext parameter --- .../sbm/parsers/RewriteProjectParser.java | 4 ++-- .../openrewrite/maven/CalculateClasspathTest.java | 2 +- .../ParserEventPublicationIntegrationTest.java | 3 +-- .../parsers/RewriteProjectParserIntegrationTest.java | 12 +++--------- .../sbm/parsers/RewriteProjectParserTest.java | 2 +- .../parsers/maven/RewriteMavenProjectParserTest.java | 4 ++-- 6 files changed, 10 insertions(+), 17 deletions(-) diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteProjectParser.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteProjectParser.java index d27c984f7..e2c073649 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteProjectParser.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteProjectParser.java @@ -87,13 +87,13 @@ public class RewriteProjectParser { */ public RewriteProjectParsingResult parse(Path baseDir) { List resources = scanner.scan(baseDir); - return this.parse(baseDir, resources, executionContext); + return this.parse(baseDir, resources); } /** * Parse given {@link Resource}s in {@code baseDir} to OpenRewrite AST representation. */ - public RewriteProjectParsingResult parse(Path givenBaseDir, List resources, ExecutionContext executionContext) { + public RewriteProjectParsingResult parse(Path givenBaseDir, List resources) { scanScope.clear(beanFactory); final Path baseDir = normalizePath(givenBaseDir); diff --git a/sbm-support-rewrite/src/test/java/org/openrewrite/maven/CalculateClasspathTest.java b/sbm-support-rewrite/src/test/java/org/openrewrite/maven/CalculateClasspathTest.java index da183ff5f..c87f2c54d 100644 --- a/sbm-support-rewrite/src/test/java/org/openrewrite/maven/CalculateClasspathTest.java +++ b/sbm-support-rewrite/src/test/java/org/openrewrite/maven/CalculateClasspathTest.java @@ -108,7 +108,7 @@ void someTest() {} new DummyResource(baseDir.resolve("src/test/java/com/example/TestClass.java"), testClass) ); - RewriteProjectParsingResult parsingResult = parser.parse(baseDir, resources, new RewriteExecutionContext()); + RewriteProjectParsingResult parsingResult = parser.parse(baseDir, resources); // verify types in use SourceFile mainSourceFile = parsingResult.sourceFiles().get(1); diff --git a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/ParserEventPublicationIntegrationTest.java b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/ParserEventPublicationIntegrationTest.java index 3e605cbdf..3f3be48ee 100644 --- a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/ParserEventPublicationIntegrationTest.java +++ b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/ParserEventPublicationIntegrationTest.java @@ -18,7 +18,6 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.openrewrite.ExecutionContext; -import org.openrewrite.InMemoryExecutionContext; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.TestConfiguration; @@ -65,7 +64,7 @@ void shouldPublishParsingEvents() { parserProperties.setIgnoredPathPatterns(Set.of("{**/target/**,target/**}", "**.adoc")); List resources = projectScanner.scan(baseDir); - RewriteProjectParsingResult parsingResult = sut.parse(baseDir, resources, executionContext); + RewriteProjectParsingResult parsingResult = sut.parse(baseDir, resources); assertThat(parsingResult.sourceFiles()).hasSize(5); assertThat(parsingResult.sourceFiles().stream().map(s -> s.getSourcePath().toString()).toList()) diff --git a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteProjectParserIntegrationTest.java b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteProjectParserIntegrationTest.java index 0f9da7690..5375546b6 100644 --- a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteProjectParserIntegrationTest.java +++ b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteProjectParserIntegrationTest.java @@ -17,7 +17,6 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import org.openrewrite.InMemoryExecutionContext; import org.openrewrite.java.tree.J; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -52,7 +51,7 @@ public class RewriteProjectParserIntegrationTest { void parseCheckstyle() { Path baseDir = TestProjectHelper.getMavenProject("checkstyle"); List resources = projectScanner.scan(baseDir); - RewriteProjectParsingResult parsingResult = sut.parse(baseDir, resources, new InMemoryExecutionContext(t -> {throw new RuntimeException(t);})); + RewriteProjectParsingResult parsingResult = sut.parse(baseDir, resources); assertThat(parsingResult.sourceFiles().stream().map(sf -> sf.getSourcePath().toString()).toList()).contains("checkstyle/rules.xml"); assertThat(parsingResult.sourceFiles().stream().map(sf -> sf.getSourcePath().toString()).toList()).contains("checkstyle/suppressions.xml"); } @@ -74,12 +73,7 @@ void parseResources() { Path baseDir = TestProjectHelper.getMavenProject("resources"); List resources = projectScanner.scan(baseDir); -// RewriteProjectParsingResult parsingResult1 = mavenProjectParser.parse(baseDir); -// assertThat(parsingResult1.sourceFiles()).hasSize(5); - - RewriteProjectParsingResult parsingResult = sut.parse(baseDir, resources, new InMemoryExecutionContext(t -> { - throw new RuntimeException(t); - })); + RewriteProjectParsingResult parsingResult = sut.parse(baseDir, resources); assertThat(parsingResult.sourceFiles()).hasSize(5); } @@ -91,7 +85,7 @@ void parse4Modules() { assertThat(resources).hasSize(4); - RewriteProjectParsingResult parsingResult = sut.parse(baseDir, resources, new InMemoryExecutionContext(t -> {throw new RuntimeException(t);})); + RewriteProjectParsingResult parsingResult = sut.parse(baseDir, resources); assertThat(parsingResult.sourceFiles()).hasSize(4); } diff --git a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteProjectParserTest.java b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteProjectParserTest.java index 9992e5cd0..036bfc9c6 100644 --- a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteProjectParserTest.java +++ b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteProjectParserTest.java @@ -126,7 +126,7 @@ public void parsed(Parser.Input input, SourceFile sourceFile) { new DummyResource(basePath.resolve("src/main/java/com/example/MyMain.java"), javaClass)); ResourceUtil.write(basePath, resources); - RewriteProjectParsingResult parsingResult = projectParser.parse(basePath, resources, executionContext); + RewriteProjectParsingResult parsingResult = projectParser.parse(basePath, resources); assertThat(parsingResult.sourceFiles()).hasSize(2); } diff --git a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/RewriteMavenProjectParserTest.java b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/RewriteMavenProjectParserTest.java index 97b5de4aa..5c6131529 100644 --- a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/RewriteMavenProjectParserTest.java +++ b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/RewriteMavenProjectParserTest.java @@ -284,14 +284,14 @@ void parseMultiModule1_WithCustomParser() { scanScope, beanFactory, new ProjectScanner(new DefaultResourceLoader(), parserProperties), - ctx, + new RewriteExecutionContext(), new MavenProjectAnalyzer(mock(RewriteMavenArtifactDownloader.class)) ); Set ignoredPatters = Set.of(); ProjectScanner projectScanner = new ProjectScanner(new FileSystemResourceLoader(), parserProperties); List resources = projectScanner.scan(baseDir); - RewriteProjectParsingResult parsingResult1 = rpp.parse(baseDir, resources, ctx); + RewriteProjectParsingResult parsingResult1 = rpp.parse(baseDir, resources); verifyMavenParser(parsingResult1); Mockito.verify(scanScope).clear(beanFactory); From cc39ac574c4c13837f9dc116b0f9981817184bd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Kr=C3=BCger?= Date: Sat, 30 Sep 2023 21:10:24 +0200 Subject: [PATCH 16/32] Cleanup --- .../sbm/parsers/RewriteProjectParser.java | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteProjectParser.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteProjectParser.java index e2c073649..f60933a2d 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteProjectParser.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteProjectParser.java @@ -109,10 +109,6 @@ public RewriteProjectParsingResult parse(Path givenBaseDir, List resou // Get the ordered list of projects ParserContext parserContext = mavenProjectAnalyzer.createParserContext(baseDir, resources); - // SortedProjects makes downstream components independent of Maven classes - // TODO: 945 Is SortedProjects still required? -// List sortedBuildFileResources = buildFileParser.filterAndSortBuildFiles(resources); - // generate provenance Map> provenanceMarkers = provenanceMarkerFactory.generateProvenanceMarkers(baseDir, parserContext); @@ -130,8 +126,7 @@ public RewriteProjectParsingResult parse(Path givenBaseDir, List resou log.trace("Start to parse %d source files in %d modules".formatted(resources.size() + resourceToDocumentMap.size(), resourceToDocumentMap.size())); List list = sourceFileParser.parseOtherSourceFiles(baseDir, parserContext, resourceToDocumentMap, resources, provenanceMarkers, styles, executionContext); -// List sourceFilesWithoutPoms = sourceFilesStream.filter(sf -> resourceToDocumentMap.keySet().contains(baseDir.resolve(sf.getSourcePath()).toAbsolutePath().normalize())).toList(); - List resultingList = new ArrayList<>(); // sourceFilesStream2.toList(); + List resultingList = new ArrayList<>(); resultingList.addAll(parsedAndSortedBuildFileDocuments); resultingList.addAll(list); List sourceFiles = styleDetector.sourcesWithAutoDetectedStyles(resultingList.stream()); @@ -139,8 +134,6 @@ public RewriteProjectParsingResult parse(Path givenBaseDir, List resou eventPublisher.publishEvent(new SuccessfullyParsedProjectEvent(sourceFiles)); return new RewriteProjectParsingResult(sourceFiles, executionContext); -// }); - } @NotNull From 022d3ffc2da51bb9ace4455edbd4d39fed7fbc71 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Kr=C3=BCger?= Date: Sat, 30 Sep 2023 22:47:58 +0200 Subject: [PATCH 17/32] Renamed SbmMavenProject --- ...SbmMavenProject.java => MavenProject.java} | 13 +++---- .../parsers/maven/MavenProjectAnalyzer.java | 22 ++++++------ .../maven/ProvenanceMarkerFactoryTest.java | 34 +++++++++---------- 3 files changed, 34 insertions(+), 35 deletions(-) rename sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/{SbmMavenProject.java => MavenProject.java} (93%) diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/SbmMavenProject.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/MavenProject.java similarity index 93% rename from sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/SbmMavenProject.java rename to sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/MavenProject.java index 9776379f4..8c7a890f0 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/SbmMavenProject.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/MavenProject.java @@ -23,6 +23,7 @@ import org.openrewrite.SourceFile; import org.openrewrite.maven.tree.*; import org.openrewrite.maven.utilities.MavenArtifactDownloader; +import org.openrewrite.xml.tree.Xml; import org.springframework.core.io.Resource; import org.springframework.sbm.parsers.maven.MavenRuntimeInformation; import org.springframework.sbm.utils.ResourceUtil; @@ -38,19 +39,19 @@ /** * @author Fabian Krüger */ -public class SbmMavenProject { +public class MavenProject { private final Path projectRoot; private final Resource pomFile; // FIXME: 945 temporary method, model should nopt come from Maven private final Model pomModel; - private List collectedProjects = new ArrayList<>(); - private SourceFile sourceFile; + private List collectedProjects = new ArrayList<>(); + private Xml.Document sourceFile; private final MavenArtifactDownloader rewriteMavenArtifactDownloader; private final List resources; private ProjectId projectId; - public SbmMavenProject(Path projectRoot, Resource pomFile, Model pomModel, MavenArtifactDownloader rewriteMavenArtifactDownloader, List resources) { + public MavenProject(Path projectRoot, Resource pomFile, Model pomModel, MavenArtifactDownloader rewriteMavenArtifactDownloader, List resources) { this.projectRoot = projectRoot; this.pomFile = pomFile; this.pomModel = pomModel; @@ -68,11 +69,11 @@ public Path getBasedir() { return pomFile == null ? null : ResourceUtil.getPath(pomFile).getParent(); } - public void setCollectedProjects(List collected) { + public void setCollectedProjects(List collected) { this.collectedProjects = collected; } - public List getCollectedProjects() { + public List getCollectedProjects() { return collectedProjects; } diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/MavenProjectAnalyzer.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/MavenProjectAnalyzer.java index ee22d889a..30de7eb4e 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/MavenProjectAnalyzer.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/MavenProjectAnalyzer.java @@ -20,8 +20,8 @@ import org.codehaus.plexus.util.xml.pull.XmlPullParserException; import org.openrewrite.maven.utilities.MavenArtifactDownloader; import org.springframework.core.io.Resource; +import org.springframework.sbm.parsers.MavenProject; import org.springframework.sbm.parsers.ParserContext; -import org.springframework.sbm.parsers.SbmMavenProject; import org.springframework.sbm.utils.ResourceUtil; import java.io.File; @@ -47,7 +47,7 @@ public MavenProjectAnalyzer(MavenArtifactDownloader rewriteMavenArtifactDownload this.rewriteMavenArtifactDownloader = rewriteMavenArtifactDownloader; } - public List getSortedProjects(Path baseDir, List resources) { + public List getSortedProjects(Path baseDir, List resources) { List allPomFiles = resources.stream().filter(r -> ResourceUtil.getPath(r).getFileName().toString().equals(POM_XML)).toList(); @@ -59,7 +59,7 @@ public List getSortedProjects(Path baseDir, List reso Model rootPomModel = new Model(rootPom); if (isSingleModuleProject(rootPomModel)) { - return List.of(new SbmMavenProject(baseDir, rootPom, rootPomModel, rewriteMavenArtifactDownloader, resources)); + return List.of(new MavenProject(baseDir, rootPom, rootPomModel, rewriteMavenArtifactDownloader, resources)); } List reactorModels = new ArrayList<>(); recursivelyFindReactorModules(baseDir, null, reactorModels, allPomFiles, rootPomModel); @@ -67,21 +67,21 @@ public List getSortedProjects(Path baseDir, List reso return map(baseDir, resources, sortedModels); } - private List map(Path baseDir, List resources, List sortedModels) { - List sbmMavenProjects = new ArrayList<>(); + private List map(Path baseDir, List resources, List sortedModels) { + List mavenProjects = new ArrayList<>(); sortedModels .stream() .filter(Objects::nonNull) .forEach(m -> { String projectDir = baseDir.resolve(m.getProjectDirectory().toString()).normalize().toString(); List filteredResources = resources.stream().filter(r -> ResourceUtil.getPath(r).toString().startsWith(projectDir)).toList(); - sbmMavenProjects.add(new SbmMavenProject(baseDir, m.getResource(), m, rewriteMavenArtifactDownloader, filteredResources)); + mavenProjects.add(new MavenProject(baseDir, m.getResource(), m, rewriteMavenArtifactDownloader, filteredResources)); }); // set all non parent poms as collected projects for root parent pom - List collected = new ArrayList<>(sbmMavenProjects); + List collected = new ArrayList<>(mavenProjects); collected.remove(0); - sbmMavenProjects.get(0).setCollectedProjects(collected); - return sbmMavenProjects; + mavenProjects.get(0).setCollectedProjects(collected); + return mavenProjects; } private List recursivelyFindReactorModules(Path baseDir, String path, List reactorModels, List allPomFiles, Model pomModel) { @@ -190,8 +190,8 @@ private static boolean isSingleModuleProject(Model rootPomModel) { } public ParserContext createParserContext(Path baseDir, List resources) { - List sortedProjectsList = getSortedProjects(baseDir, resources); - ParserContext parserContext = new ParserContext(resources, sortedProjectsList); + List sortedProjectsList = getSortedProjects(baseDir, resources); + ParserContext parserContext = new ParserContext(baseDir, resources, sortedProjectsList); return parserContext; } diff --git a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/ProvenanceMarkerFactoryTest.java b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/ProvenanceMarkerFactoryTest.java index 5cac0599b..9af4c0c56 100644 --- a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/ProvenanceMarkerFactoryTest.java +++ b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/ProvenanceMarkerFactoryTest.java @@ -16,7 +16,6 @@ package org.springframework.sbm.parsers.maven; import org.apache.maven.plugin.logging.Log; -import org.apache.maven.project.MavenProject; import org.apache.maven.rtinfo.RuntimeInformation; import org.apache.maven.rtinfo.internal.DefaultRuntimeInformation; import org.apache.maven.settings.crypto.SettingsDecrypter; @@ -37,10 +36,9 @@ import org.openrewrite.shaded.jgit.lib.Repository; import org.openrewrite.shaded.jgit.storage.file.FileRepositoryBuilder; import org.springframework.core.io.Resource; +import org.springframework.sbm.parsers.MavenProject; import org.springframework.sbm.parsers.ParserContext; import org.springframework.sbm.parsers.ParserProperties; -import org.springframework.sbm.parsers.SbmMavenProject; -import org.springframework.sbm.parsers.maven.*; import org.springframework.sbm.test.util.DummyResource; import org.springframework.sbm.utils.ResourceUtil; @@ -78,14 +76,14 @@ void testMavenMojoProjectParserGenerateProvenance() { MavenMojoProjectParserFactory mavenMojoProjectParserFactory = new MavenMojoProjectParserFactory(new ParserProperties()); MavenMojoProjectParser sut = mavenMojoProjectParserFactory.create(baseDir, runtimeInformation, settingsDecrypter); - // the sut requires a SbmMavenProject, let's retrieve it from Maven + // the sut requires a MavenProject, let's retrieve it from Maven MavenExecutor mavenExecutor = new MavenExecutor(new MavenExecutionRequestFactory(new MavenConfigFileParser()), new MavenPlexusContainer()); // doing a 'mvn clean install' mavenExecutor.onProjectSucceededEvent(baseDir, List.of("clean", "package"), event -> { - // and then use the SbmMavenProject from the MavenSession - MavenProject mavenModel = event.getSession().getCurrentProject(); + // and then use the MavenProject from the MavenSession + org.apache.maven.project.MavenProject mavenModel = event.getSession().getCurrentProject(); // to call the sut List markers = sut.generateProvenance(mavenModel); @@ -175,29 +173,29 @@ void shouldCreateProvenanceMarkers(@TempDir Path tempDir) { ParserContext sortedProjects = mock(ParserContext.class); - SbmMavenProject sbmMavenProject1 = mock(SbmMavenProject.class); - SbmMavenProject sbmMavenProject2 = mock(SbmMavenProject.class); - List sbmMavenProjects = List.of( - sbmMavenProject1, - sbmMavenProject2 + MavenProject mavenProject1 = mock(MavenProject.class); + MavenProject mavenProject2 = mock(MavenProject.class); + List mavenProjects = List.of( + mavenProject1, + mavenProject2 ); // The provided TopologicallySortedProjects instance will // provide the sorted MavenProjects - when(sortedProjects.getSortedProjects()).thenReturn(sbmMavenProjects); + when(sortedProjects.getSortedProjects()).thenReturn(mavenProjects); // internally the Maven projects will be matched with the provided resources Path path1 = Path.of("some/path").toAbsolutePath().normalize(); - // path1 matches with sbmMavenProject1 - when(sortedProjects.getMatchingBuildFileResource(sbmMavenProject1)).thenReturn(new DummyResource(path1, "")); + // path1 matches with mavenProject1 + when(sortedProjects.getMatchingBuildFileResource(mavenProject1)).thenReturn(new DummyResource(path1, "")); Path path2 = Path.of("some/other").toAbsolutePath().normalize(); - // path2 matches with sbmMavenProject2 - when(sortedProjects.getMatchingBuildFileResource(sbmMavenProject2)).thenReturn(new DummyResource(path2, "")); + // path2 matches with mavenProject2 + when(sortedProjects.getMatchingBuildFileResource(mavenProject2)).thenReturn(new DummyResource(path2, "")); List markers1 = List.of(); List markers2 = List.of(); // FIXME: 945 -// when(mojoProjectParser.generateProvenance(sbmMavenProject1)).thenReturn(markers1); +// when(mojoProjectParser.generateProvenance(mavenProject1)).thenReturn(markers1); // FIXME: 945 -// when(mojoProjectParser.generateProvenance(sbmMavenProject2)).thenReturn(markers2); +// when(mojoProjectParser.generateProvenance(mavenProject2)).thenReturn(markers2); // FIXME: 945 // Map> resourceListMap = sut.generateProvenanceMarkers(baseDir, sortedProjects); // FIXME: 945 From a4b0643ed35a988b50e4ec19292c1fb4abad28d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Kr=C3=BCger?= Date: Sat, 30 Sep 2023 22:48:01 +0200 Subject: [PATCH 18/32] Moved logic into ParserContext --- .../sbm/parsers/MavenProject.java | 2 +- .../sbm/parsers/ModuleParser.java | 4 +- .../sbm/parsers/ParserContext.java | 40 +++++++++++++++++-- .../sbm/parsers/RewriteProjectParser.java | 29 +++++--------- .../sbm/parsers/SourceFileParser.java | 6 +-- .../sbm/parsers/maven/BuildFileParser.java | 30 ++++---------- .../maven/MavenProvenanceMarkerFactory.java | 4 +- .../sbm/parsers/BuildFileParserTest.java | 8 ++-- .../maven/MavenProjectAnalyzerTest.java | 19 +++++---- ...t.java => MavenProjectResolutionTest.java} | 8 +--- .../maven/RewriteMavenProjectParserTest.java | 2 +- 11 files changed, 77 insertions(+), 75 deletions(-) rename sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/{SbmMavenProjectResolutionTest.java => MavenProjectResolutionTest.java} (95%) diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/MavenProject.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/MavenProject.java index 8c7a890f0..725560384 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/MavenProject.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/MavenProject.java @@ -178,7 +178,7 @@ public String getTestSourceDirectory() { return s == null ? ResourceUtil.getPath(pomFile).getParent().resolve("src/test/java").toAbsolutePath().normalize().toString() : s; } - public void setSourceFile(SourceFile sourceFile) { + public void setSourceFile(Xml.Document sourceFile) { this.sourceFile = sourceFile; } diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/ModuleParser.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/ModuleParser.java index 64c24e27c..61d8c8121 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/ModuleParser.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/ModuleParser.java @@ -79,7 +79,7 @@ public List processMainSources( List provenanceMarkers, Set alreadyParsed, ExecutionContext executionContext, - SbmMavenProject currentProject + MavenProject currentProject ) { log.info("Processing main sources in module '%s'".formatted(currentProject.getProjectId())); // FIXME: 945 @@ -165,7 +165,7 @@ public List processTestSources( List provenanceMarkers, Set alreadyParsed, ExecutionContext executionContext, - SbmMavenProject currentProject, + MavenProject currentProject, List resources ) { log.info("Processing test sources in module '%s'".formatted(currentProject.getProjectId())); diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/ParserContext.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/ParserContext.java index 6fa977e03..84ccb3038 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/ParserContext.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/ParserContext.java @@ -17,10 +17,15 @@ import lombok.Getter; import lombok.RequiredArgsConstructor; +import org.openrewrite.SourceFile; +import org.openrewrite.xml.tree.Xml; import org.springframework.core.io.Resource; import org.springframework.sbm.utils.ResourceUtil; +import java.nio.file.Path; import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; /** * @author Fabian Krüger @@ -28,21 +33,26 @@ @RequiredArgsConstructor public class ParserContext { + private final Path baseDir; @Getter private final List resources; @Getter - private final List sortedProjects; + private final List sortedProjects; + @Getter + private Map pathDocumentMap; + + public List getActiveProfiles() { // FIXME: Add support for Maven profiles return List.of("default"); } - public Resource getMatchingBuildFileResource(SbmMavenProject pom) { + public Resource getMatchingBuildFileResource(MavenProject pom) { return resources.stream() .filter(r -> ResourceUtil.getPath(r).toString().equals(pom.getPomFilePath().toString())) .findFirst() - .orElseThrow(() -> new IllegalStateException("Could not find a resource in the list of resources that matches the path of SbmMavenProject '%s'".formatted(pom.getPomFile().toString()))); + .orElseThrow(() -> new IllegalStateException("Could not find a resource in the list of resources that matches the path of MavenProject '%s'".formatted(pom.getPomFile().toString()))); } public List getBuildFileResources() { @@ -50,4 +60,28 @@ public List getBuildFileResources() { .map(p -> p.getPomFile()) .toList(); } + + public Xml.Document getXmlDocument(Path path) { + return pathDocumentMap.get(path); + } + + public Map getPathDocumentMap() { + return pathDocumentMap; + } + + public void setParsedBuildFiles(List xmlDocuments) { + this.pathDocumentMap = xmlDocuments.stream() + .peek(doc -> addSourceFileToModel(baseDir, getSortedProjects(), doc)) + .collect(Collectors.toMap(doc -> baseDir.resolve(doc.getSourcePath()), doc -> doc)); + } + + public List getSortedBuildFileDocuments() { + return getSortedProjects().stream().map(p -> pathDocumentMap.get(p.getFile().toPath())).toList(); + } + + private void addSourceFileToModel(Path baseDir, List sortedProjectsList, Xml.Document s) { + sortedProjectsList.stream() + .filter(p -> ResourceUtil.getPath(p.getPomFile()).toString().equals(baseDir.resolve(s.getSourcePath()).toString())) + .forEach(p -> p.setSourceFile(s)); + } } diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteProjectParser.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteProjectParser.java index f60933a2d..a343179aa 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteProjectParser.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteProjectParser.java @@ -21,8 +21,6 @@ import org.openrewrite.ExecutionContext; import org.openrewrite.SourceFile; import org.openrewrite.marker.Marker; -import org.openrewrite.maven.MavenExecutionContextView; -import org.openrewrite.maven.tree.*; import org.openrewrite.style.NamedStyles; import org.openrewrite.tree.ParsingEventListener; import org.openrewrite.tree.ParsingExecutionContextView; @@ -36,7 +34,6 @@ import org.springframework.sbm.parsers.maven.MavenProjectAnalyzer; import org.springframework.sbm.parsers.maven.ProvenanceMarkerFactory; import org.springframework.sbm.scopes.ScanScope; -import org.springframework.sbm.utils.ResourceUtil; import java.nio.file.Path; import java.util.*; @@ -106,7 +103,7 @@ public RewriteProjectParsingResult parse(Path givenBaseDir, List resou // TODO: where to retrieve styles from? --> see AbstractRewriteMojo#getActiveStyles() & AbstractRewriteMojo#loadStyles() List styles = List.of(); - // Get the ordered list of projects + // Get the ordered otherSourceFiles of projects ParserContext parserContext = mavenProjectAnalyzer.createParserContext(baseDir, resources); // generate provenance @@ -114,21 +111,18 @@ public RewriteProjectParsingResult parse(Path givenBaseDir, List resou // 127: parse build files // TODO: 945 this map is only used to lookup module pom by path in SourceFileParser. If possible provide the build file from ParserContext and remove this map. - Map resourceToDocumentMap = buildFileParser.parseBuildFiles(baseDir, parserContext.getBuildFileResources(), parserContext.getActiveProfiles(), executionContext, parserProperties.isSkipMavenParsing(), provenanceMarkers); + List parsedBuildFiles = buildFileParser.parseBuildFiles(baseDir, parserContext.getBuildFileResources(), parserContext.getActiveProfiles(), executionContext, parserProperties.isSkipMavenParsing(), provenanceMarkers); + parserContext.setParsedBuildFiles(parsedBuildFiles); - List parsedAndSortedBuildFileDocuments = parserContext.getBuildFileResources().stream() - .map(r -> resourceToDocumentMap.get(ResourceUtil.getPath(r))) - .map(SourceFile.class::cast) - // FIXME: 945 ugly hack - .peek(sourceFile -> addSourceFileToModel(baseDir, parserContext.getSortedProjects(), sourceFile)) - .toList(); - log.trace("Start to parse %d source files in %d modules".formatted(resources.size() + resourceToDocumentMap.size(), resourceToDocumentMap.size())); - List list = sourceFileParser.parseOtherSourceFiles(baseDir, parserContext, resourceToDocumentMap, resources, provenanceMarkers, styles, executionContext); + log.trace("Start to parse %d source files in %d modules".formatted(resources.size() + parsedBuildFiles.size(), parsedBuildFiles.size())); + List otherSourceFiles = sourceFileParser.parseOtherSourceFiles(baseDir, parserContext, resources, provenanceMarkers, styles, executionContext); + + List sortedBuildFileDocuments = parserContext.getSortedBuildFileDocuments(); List resultingList = new ArrayList<>(); - resultingList.addAll(parsedAndSortedBuildFileDocuments); - resultingList.addAll(list); + resultingList.addAll(sortedBuildFileDocuments); + resultingList.addAll(otherSourceFiles); List sourceFiles = styleDetector.sourcesWithAutoDetectedStyles(resultingList.stream()); eventPublisher.publishEvent(new SuccessfullyParsedProjectEvent(sourceFiles)); @@ -145,9 +139,4 @@ private static Path normalizePath(Path givenBaseDir) { return baseDir; } - private static void addSourceFileToModel(Path baseDir, List sortedProjectsList, SourceFile s) { - sortedProjectsList.stream() - .filter(p -> ResourceUtil.getPath(p.getPomFile()).toString().equals(baseDir.resolve(s.getSourcePath()).toString())) - .forEach(p -> p.setSourceFile(s)); - } } diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/SourceFileParser.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/SourceFileParser.java index 22e0320e3..256aee2bf 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/SourceFileParser.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/SourceFileParser.java @@ -46,7 +46,6 @@ public class SourceFileParser { public List parseOtherSourceFiles( Path baseDir, ParserContext parserContext, - Map pathToDocumentMap, List resources, Map> provenanceMarkers, List styles, @@ -55,9 +54,8 @@ public List parseOtherSourceFiles( Set parsedSourceFiles = new LinkedHashSet<>(); parserContext.getSortedProjects().forEach(currentMavenProject -> { - Resource moduleBuildFileResource = parserContext.getMatchingBuildFileResource(currentMavenProject); - Xml.Document moduleBuildFile = pathToDocumentMap.get(ResourceUtil.getPath(moduleBuildFileResource)); - List markers = provenanceMarkers.get(ResourceUtil.getPath(moduleBuildFileResource)); + Xml.Document moduleBuildFile = currentMavenProject.getSourceFile(); + List markers = provenanceMarkers.get(currentMavenProject.getPomFilePath()); if(markers == null || markers.isEmpty()) { log.warn("Could not find provenance markers for resource '%s'".formatted(parserContext.getMatchingBuildFileResource(currentMavenProject))); } diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/BuildFileParser.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/BuildFileParser.java index 08151f06f..c178e9db2 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/BuildFileParser.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/BuildFileParser.java @@ -32,6 +32,7 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import java.util.stream.Stream; import static java.util.Collections.emptyList; @@ -57,7 +58,7 @@ class BuildFileParser { * * @param skipMavenParsing skip parsing Maven files * @param provenanceMarkers the map of markers to be added */ - public Map parseBuildFiles( + public List parseBuildFiles( Path baseDir, List buildFiles, List activeProfiles, @@ -74,7 +75,7 @@ public Map parseBuildFiles( if(skipMavenParsing) { log.info("Maven parsing skipped [parser.skipMavenParsing=true]."); - return Map.of(); + return List.of(); } // 380 : 382 @@ -89,29 +90,14 @@ public Map parseBuildFiles( initializeMavenSettings(executionContext); // 395 : 398 - mavenParserBuilder.activeProfiles(activeProfiles.toArray(new String[]{})); // 400 : 402 - List parsedPoms = parsePoms(baseDir, buildFiles, mavenParserBuilder, executionContext); - - parsedPoms = parsedPoms.stream() + List parsedPoms = parsePoms(baseDir, buildFiles, mavenParserBuilder, executionContext) .map(pp -> this.markPomFile(pp, provenanceMarkers.getOrDefault(baseDir.resolve(pp.getSourcePath()), emptyList()))) .toList(); - // 422 : 436 - Map result = createResult(baseDir, buildFiles, parsedPoms); - - // 438 : 444: add marker -// for (Resource mavenProject : pomFiles) { -// List markers = provenanceMarkers.getOrDefault(mavenProject, emptyList()); -// Xml.Document document = result.get(mavenProject); -// for (Marker marker : markers) { -// result.put(mavenProject, document.withMarkers(document.getMarkers().addIfAbsent(marker))); -// } -// } - - return result; + return parsedPoms; } private List findResourcesWithoutProvenanceMarker(Path baseDir, List buildFileResources, Map> provenanceMarkers) { @@ -124,7 +110,7 @@ private static List retrieveNonPomFiles(List buildFileResour return buildFileResources.stream().filter(r -> !"pom.xml".equals(ResourceUtil.getPath(r).getFileName().toString())).toList(); } - private SourceFile markPomFile(SourceFile pp, List markers) { + private Xml.Document markPomFile(Xml.Document pp, List markers) { for (Marker marker : markers) { pp = pp.withMarkers(pp.getMarkers().addIfAbsent(marker)); } @@ -146,11 +132,11 @@ private Map.Entry mapResourceToDocument(Path basePath, S return Map.entry(resource, doc); } - private List parsePoms(Path baseDir, List pomFiles, MavenParser.Builder mavenParserBuilder, ExecutionContext executionContext) { + private Stream parsePoms(Path baseDir, List pomFiles, MavenParser.Builder mavenParserBuilder, ExecutionContext executionContext) { Iterable pomFileInputs = pomFiles.stream() .map(p -> new Parser.Input(ResourceUtil.getPath(p), () -> ResourceUtil.getInputStream(p))) .toList(); - return mavenParserBuilder.build().parseInputs(pomFileInputs, baseDir, executionContext).toList(); + return mavenParserBuilder.build().parseInputs(pomFileInputs, baseDir, executionContext).map(Xml.Document.class::cast); } private void initializeMavenSettings(ExecutionContext executionContext) { diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/MavenProvenanceMarkerFactory.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/MavenProvenanceMarkerFactory.java index 6f75d29e3..bc23eb3b1 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/MavenProvenanceMarkerFactory.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/MavenProvenanceMarkerFactory.java @@ -26,7 +26,7 @@ import org.openrewrite.java.marker.JavaVersion; import org.openrewrite.marker.*; import org.openrewrite.marker.ci.BuildEnvironment; -import org.springframework.sbm.parsers.SbmMavenProject; +import org.springframework.sbm.parsers.MavenProject; import java.nio.file.Path; import java.util.List; @@ -42,7 +42,7 @@ @RequiredArgsConstructor public class MavenProvenanceMarkerFactory { - public List generateProvenance(Path baseDir, SbmMavenProject mavenProject) { + public List generateProvenance(Path baseDir, MavenProject mavenProject) { MavenRuntimeInformation runtime = mavenProject.getMavenRuntimeInformation(); BuildTool buildTool = new BuildTool(Tree.randomId(), BuildTool.Type.Maven, runtime.getMavenVersion()); diff --git a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/BuildFileParserTest.java b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/BuildFileParserTest.java index 588db0d29..f881c89d5 100644 --- a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/BuildFileParserTest.java +++ b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/BuildFileParserTest.java @@ -157,7 +157,7 @@ void parseBuildFiles_shouldReturnSortedListOfParsedBuildFiles() { ExecutionContext executionContext = new InMemoryExecutionContext(t -> t.printStackTrace()); boolean skipMavenParsing = false; - Map parsedBuildFiles = sut.parseBuildFiles( + List parsedBuildFiles = sut.parseBuildFiles( baseDir, resources, List.of("default"), @@ -166,9 +166,9 @@ void parseBuildFiles_shouldReturnSortedListOfParsedBuildFiles() { provenanceMarkers); assertThat(parsedBuildFiles).hasSize(3); - assertThat(parsedBuildFiles.get(module1SubmodulePomPath).getMarkers().findFirst(JavaProject.class).get().getProjectName()).isEqualTo("module1/submodule"); - assertThat(parsedBuildFiles.get(parentPomPath).getMarkers().findFirst(JavaProject.class).get().getProjectName()).isEqualTo("parent"); - assertThat(parsedBuildFiles.get(module1PomXml).getMarkers().findFirst(JavaProject.class).get().getProjectName()).isEqualTo("module1"); + assertThat(parsedBuildFiles.get(0).getMarkers().findFirst(JavaProject.class).get().getProjectName()).isEqualTo("module1/submodule"); + assertThat(parsedBuildFiles.get(1).getMarkers().findFirst(JavaProject.class).get().getProjectName()).isEqualTo("parent"); + assertThat(parsedBuildFiles.get(2).getMarkers().findFirst(JavaProject.class).get().getProjectName()).isEqualTo("module1"); } @Test diff --git a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenProjectAnalyzerTest.java b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenProjectAnalyzerTest.java index 1e86074f6..b8cac286f 100644 --- a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenProjectAnalyzerTest.java +++ b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenProjectAnalyzerTest.java @@ -17,7 +17,6 @@ package org.springframework.sbm.parsers.maven; import org.apache.maven.execution.MavenSession; -import org.apache.maven.project.MavenProject; import org.intellij.lang.annotations.Language; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -27,8 +26,8 @@ import org.mockito.Mockito; import org.openrewrite.maven.utilities.MavenArtifactDownloader; import org.springframework.core.io.Resource; +import org.springframework.sbm.parsers.MavenProject; import org.springframework.sbm.parsers.RewriteMavenArtifactDownloader; -import org.springframework.sbm.parsers.SbmMavenProject; import org.springframework.sbm.test.util.DummyResource; import org.springframework.sbm.utils.ResourceUtil; @@ -166,8 +165,8 @@ void compareMavenProjectGetCollectedProjects(@TempDir Path tmpDir) { writeToDisk(baseDir, resources); MavenSession mavenSession = startMavenSession(baseDir); - List mavenSorted = mavenSession.getProjectDependencyGraph().getSortedProjects(); - List sbmSorted = sut.getSortedProjects(baseDir, resources); + List mavenSorted = mavenSession.getProjectDependencyGraph().getSortedProjects(); + List sbmSorted = sut.getSortedProjects(baseDir, resources); assertThat(mavenSorted).hasSize(5); assertThat(mavenSorted.size()).isEqualTo(sbmSorted.size()); @@ -236,7 +235,7 @@ void projectWithSinglePom() { List resources = List.of(new DummyResource(Path.of("pom.xml"), singlePom)); Path baseDir = Path.of(".").toAbsolutePath().normalize(); - List sortedProjects = sut.getSortedProjects(baseDir, resources); + List sortedProjects = sut.getSortedProjects(baseDir, resources); assertThat(sortedProjects).hasSize(1); } @@ -285,7 +284,7 @@ void reactorBuild() { ); - List sortedProjects = sut.getSortedProjects(Path.of(".").toAbsolutePath(), resources); + List sortedProjects = sut.getSortedProjects(Path.of(".").toAbsolutePath(), resources); assertThat(sortedProjects).hasSize(2); @@ -356,7 +355,7 @@ void reactorBuildWithDanglingPom() { ); - List sortedProjects = sut.getSortedProjects(Path.of(".").toAbsolutePath(), resources); + List sortedProjects = sut.getSortedProjects(Path.of(".").toAbsolutePath(), resources); assertThat(sortedProjects).hasSize(2); @@ -435,7 +434,7 @@ void reactorBuildWithDanglingPomWhichAReactorModuleDependsOn() { ); - List sortedProjects = sut.getSortedProjects(Path.of(".").toAbsolutePath(), resources); + List sortedProjects = sut.getSortedProjects(Path.of(".").toAbsolutePath(), resources); assertThat(sortedProjects).hasSize(2); @@ -525,7 +524,7 @@ void theReactorBuildOrderIsReturned() { ); - List sortedProjects = sut.getSortedProjects(Path.of(".").toAbsolutePath(), resources); + List sortedProjects = sut.getSortedProjects(Path.of(".").toAbsolutePath(), resources); // Returned ordered assertThat(sortedProjects).hasSize(4); @@ -635,7 +634,7 @@ void moreComplex() { // Provided unordered - List sortedProjects = sut.getSortedProjects(Path.of(".").toAbsolutePath(), resources); + List sortedProjects = sut.getSortedProjects(Path.of(".").toAbsolutePath(), resources); // Expected order is parent, module-b, module-c, module-a assertThat(sortedProjects).hasSize(4); diff --git a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/SbmMavenProjectResolutionTest.java b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenProjectResolutionTest.java similarity index 95% rename from sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/SbmMavenProjectResolutionTest.java rename to sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenProjectResolutionTest.java index dcfcfc45c..b09f99a9b 100644 --- a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/SbmMavenProjectResolutionTest.java +++ b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/MavenProjectResolutionTest.java @@ -21,10 +21,6 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; -import org.springframework.sbm.parsers.maven.MavenConfigFileParser; -import org.springframework.sbm.parsers.maven.MavenExecutionRequestFactory; -import org.springframework.sbm.parsers.maven.MavenExecutor; -import org.springframework.sbm.parsers.maven.MavenPlexusContainer; import java.nio.file.Files; import java.nio.file.Path; @@ -36,10 +32,10 @@ /** * @author Fabian Krüger */ -class SbmMavenProjectResolutionTest { +class MavenProjectResolutionTest { @Test - @DisplayName("Factory should create fully initialized SbmMavenProject") + @DisplayName("Factory should create fully initialized MavenProject") void verifyMavenProjectRetrievedFromSession(@TempDir Path tempDir) throws Exception { @Language("xml") String pomXml = """ diff --git a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/RewriteMavenProjectParserTest.java b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/RewriteMavenProjectParserTest.java index 5c6131529..325b683f9 100644 --- a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/RewriteMavenProjectParserTest.java +++ b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/maven/RewriteMavenProjectParserTest.java @@ -276,7 +276,7 @@ void parseMultiModule1_WithCustomParser() { RewriteProjectParser rpp = new RewriteProjectParser( new ProvenanceMarkerFactory(new MavenProvenanceMarkerFactory()), new BuildFileParser(), - new SourceFileParser(parserProperties, moduleParser), + new SourceFileParser(new MavenModuleParser(parserProperties, moduleParser)), new StyleDetector(), parserProperties, mock(ParsingEventListener.class), From b8e9ecdef65e61990459b175da32c8d4c020d320 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Kr=C3=BCger?= Date: Sat, 30 Sep 2023 22:48:04 +0200 Subject: [PATCH 19/32] Add MavenModuleParser --- .../parsers/RewriteParserConfiguration.java | 9 +- .../sbm/parsers/SourceFileParser.java | 120 +------------- .../sbm/parsers/maven/MavenModuleParser.java | 151 ++++++++++++++++++ .../sbm/parsers/RewriteProjectParserTest.java | 8 +- 4 files changed, 164 insertions(+), 124 deletions(-) create mode 100644 sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/MavenModuleParser.java diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteParserConfiguration.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteParserConfiguration.java index 7f8a97b13..bc2c8e1e0 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteParserConfiguration.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/RewriteParserConfiguration.java @@ -113,8 +113,13 @@ ModuleParser helperWithoutAGoodName() { } @Bean - SourceFileParser sourceFileParser(JavaParserBuilder javaParserBuilder, ModuleParser moduleParser) { - return new SourceFileParser(parserProperties, moduleParser); + MavenModuleParser mavenModuleParser(ParserProperties parserPropeties, ModuleParser moduleParser) { + return new MavenModuleParser(parserPropeties, moduleParser); + } + + @Bean + SourceFileParser sourceFileParser(MavenModuleParser mavenModuleParser) { + return new SourceFileParser(mavenModuleParser); } @Bean diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/SourceFileParser.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/SourceFileParser.java index 256aee2bf..dfe725d8d 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/SourceFileParser.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/SourceFileParser.java @@ -24,6 +24,7 @@ import org.openrewrite.style.NamedStyles; import org.openrewrite.xml.tree.Xml; import org.springframework.core.io.Resource; +import org.springframework.sbm.parsers.maven.MavenModuleParser; import org.springframework.sbm.utils.ResourceUtil; import java.nio.file.Path; @@ -40,8 +41,7 @@ @RequiredArgsConstructor public class SourceFileParser { - private final ParserProperties parserProperties; - private final ModuleParser mavenMojoProjectParserPrivateMethods; + private final MavenModuleParser moduleParser; public List parseOtherSourceFiles( Path baseDir, @@ -59,124 +59,10 @@ public List parseOtherSourceFiles( if(markers == null || markers.isEmpty()) { log.warn("Could not find provenance markers for resource '%s'".formatted(parserContext.getMatchingBuildFileResource(currentMavenProject))); } - List sourceFiles = parseModuleSourceFiles(resources, currentMavenProject, moduleBuildFile, markers, styles, executionContext, baseDir); + List sourceFiles = moduleParser.parseModuleSourceFiles(resources, currentMavenProject, moduleBuildFile, markers, styles, executionContext, baseDir); parsedSourceFiles.addAll(sourceFiles); }); return new ArrayList<>(parsedSourceFiles); } - - private List parseModuleSourceFiles( - List resources, - SbmMavenProject currentProject, - Xml.Document moduleBuildFile, - List provenanceMarkers, - List styles, - ExecutionContext executionContext, - Path baseDir) - { - - List sourceFiles = new ArrayList<>(); - // 146:149: get source encoding from maven - // TDOD: - //String s = moduleBuildFile.getMarkers().findFirst(MavenResolutionResult.class).get().getPom().getProperties().get("project.build.sourceEncoding"); -// if (mavenSourceEncoding != null) { -// ParsingExecutionContextView.view(ctx).setCharset(Charset.forName(mavenSourceEncoding.toString())); -// } - - // 150:153 - JavaParser.Builder javaParserBuilder = JavaParser.fromJavaVersion() - .styles(styles) - .logCompilationWarningsAndErrors(false); - - Path buildFilePath = currentProject.getBasedir().resolve(moduleBuildFile.getSourcePath()); - log.info("Parsing module " + buildFilePath); - // these paths will be ignored by ResourceParser - Set skipResourceScanDirs = pathsToOtherMavenProjects(currentProject, buildFilePath); - // FIXME: Why is skipResourceScanDirs required at all? Shouldn't the module know it's resources - RewriteResourceParser rp = new RewriteResourceParser( - baseDir, - parserProperties.getIgnoredPathPatterns(), - parserProperties.getPlainTextMasks(), - parserProperties.getSizeThresholdMb(), - skipResourceScanDirs, - javaParserBuilder.clone(), - executionContext); - - // 155:156: parse main and test sources - Set alreadyParsed = new HashSet<>(); - Path moduleBuildFilePath = baseDir.resolve(moduleBuildFile.getSourcePath()); - alreadyParsed.add(moduleBuildFilePath); - alreadyParsed.addAll(skipResourceScanDirs); - List mainSources = parseMainSources(baseDir, currentProject, moduleBuildFile, resources, javaParserBuilder.clone(), rp, provenanceMarkers, alreadyParsed, executionContext); - List testSources = parseTestSources(baseDir, currentProject, moduleBuildFile, javaParserBuilder.clone(), rp, provenanceMarkers, alreadyParsed, executionContext, resources); - // Collect the dirs of modules parsed in previous steps - - // parse other project resources - Stream parsedResourceFiles = rp.parse(moduleBuildFilePath.getParent(), resources, alreadyParsed) - // FIXME: handle generated sources - .map(mavenMojoProjectParserPrivateMethods.addProvenance(baseDir, provenanceMarkers, null)); - // 157:169 - List mainAndTestSources = mergeAndFilterExcluded(baseDir, parserProperties.getIgnoredPathPatterns(), mainSources, testSources); - List resourceFilesList = parsedResourceFiles.toList(); - sourceFiles.addAll(mainAndTestSources); - sourceFiles.addAll(resourceFilesList); - - return sourceFiles; - } - - - private List mergeAndFilterExcluded(Path baseDir, Set exclusions, List mainSources, List testSources) { - List pathMatchers = exclusions.stream() - .map(pattern -> baseDir.getFileSystem().getPathMatcher("glob:" + pattern)) - .toList(); - if(pathMatchers.isEmpty()) { - return Stream.concat(mainSources.stream(), testSources.stream()).toList(); - } - return new ArrayList<>(Stream.concat(mainSources.stream(), testSources.stream()) - .filter(s -> isNotExcluded(baseDir, pathMatchers, s)) - .toList()); - } - - private static boolean isNotExcluded(Path baseDir, List exclusions, SourceFile s) { - return exclusions.stream() - .noneMatch(pm -> pm.matches(baseDir.resolve(s.getSourcePath()).toAbsolutePath().normalize())); - } - - private List parseTestSources(Path baseDir, SbmMavenProject sbmMavenProject, Xml.Document moduleBuildFile, JavaParser.Builder javaParserBuilder, RewriteResourceParser rp, List provenanceMarkers, Set alreadyParsed, ExecutionContext executionContext, List resources) { - return mavenMojoProjectParserPrivateMethods.processTestSources(baseDir, moduleBuildFile, javaParserBuilder, rp, provenanceMarkers, alreadyParsed, executionContext, sbmMavenProject, resources); - } - - /** - */ - private List parseMainSources(Path baseDir, SbmMavenProject sbmMavenProject, Xml.Document moduleBuildFile, List resources, JavaParser.Builder javaParserBuilder, RewriteResourceParser rp, List provenanceMarkers, Set alreadyParsed, ExecutionContext executionContext) { - // MavenMojoProjectParser#processMainSources(..) takes SbmMavenProject - // it reads from it: - // - sbmMavenProject.getBuild().getDirectory() - // - sbmMavenProject.getBuild().getSourceDirectory() - // - sbmMavenProject.getCompileClasspathElements() --> The classpath of the given project/module - // - sbmMavenProject.getBasedir().toPath() - return mavenMojoProjectParserPrivateMethods.processMainSources(baseDir, resources, moduleBuildFile, javaParserBuilder, rp, provenanceMarkers, alreadyParsed, executionContext, sbmMavenProject); -// return invokeProcessMethod(baseDir, moduleBuildFile, javaParserBuilder, rp, provenanceMarkers, alreadyParsed, executionContext, "processMainSources"); - } - - - - - - - /** - * private Set pathsToOtherMavenProjects(SbmMavenProject sbmMavenProject) { - * return mavenSession.getProjects().stream() - * .filter(o -> o != sbmMavenProject) - * .map(o -> o.getBasedir().toPath()) - * .collect(Collectors.toSet()); - * } - */ - private Set pathsToOtherMavenProjects(SbmMavenProject sbmMavenProject, Path moduleBuildFile) { - return sbmMavenProject.getCollectedProjects().stream() - .filter(p -> !p.getFile().toPath().toString().equals(moduleBuildFile.toString())) - .map(p -> p.getFile().toPath().getParent()) - .collect(Collectors.toSet()); - } } diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/MavenModuleParser.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/MavenModuleParser.java new file mode 100644 index 000000000..82d2cac65 --- /dev/null +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/MavenModuleParser.java @@ -0,0 +1,151 @@ +/* + * Copyright 2021 - 2023 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.parsers.maven; + +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.openrewrite.ExecutionContext; +import org.openrewrite.SourceFile; +import org.openrewrite.java.JavaParser; +import org.openrewrite.marker.Marker; +import org.openrewrite.style.NamedStyles; +import org.openrewrite.xml.tree.Xml; +import org.springframework.core.io.Resource; +import org.springframework.sbm.parsers.MavenProject; +import org.springframework.sbm.parsers.ModuleParser; +import org.springframework.sbm.parsers.ParserProperties; +import org.springframework.sbm.parsers.RewriteResourceParser; + +import java.nio.file.Path; +import java.nio.file.PathMatcher; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * @author Fabian Krüger + */ +@Slf4j +@RequiredArgsConstructor +public class MavenModuleParser { + + private final ParserProperties parserProperties; + private final ModuleParser mavenMojoProjectParserPrivateMethods; + + public List parseModuleSourceFiles( + List resources, + MavenProject currentProject, + Xml.Document moduleBuildFile, + List provenanceMarkers, + List styles, + ExecutionContext executionContext, + Path baseDir) + { + + List sourceFiles = new ArrayList<>(); + // 146:149: get source encoding from maven + // TDOD: + //String s = moduleBuildFile.getMarkers().findFirst(MavenResolutionResult.class).get().getPom().getProperties().get("project.build.sourceEncoding"); +// if (mavenSourceEncoding != null) { +// ParsingExecutionContextView.view(ctx).setCharset(Charset.forName(mavenSourceEncoding.toString())); +// } + + // 150:153 + JavaParser.Builder javaParserBuilder = JavaParser.fromJavaVersion() + .styles(styles) + .logCompilationWarningsAndErrors(false); + + Path buildFilePath = currentProject.getBasedir().resolve(moduleBuildFile.getSourcePath()); + log.info("Parsing module " + buildFilePath); + // these paths will be ignored by ResourceParser + Set skipResourceScanDirs = pathsToOtherMavenProjects(currentProject, buildFilePath); + // FIXME: Why is skipResourceScanDirs required at all? Shouldn't the module know it's resources + RewriteResourceParser rp = new RewriteResourceParser( + baseDir, + parserProperties.getIgnoredPathPatterns(), + parserProperties.getPlainTextMasks(), + parserProperties.getSizeThresholdMb(), + skipResourceScanDirs, + javaParserBuilder.clone(), + executionContext); + + // 155:156: parse main and test sources + Set alreadyParsed = new HashSet<>(); + Path moduleBuildFilePath = baseDir.resolve(moduleBuildFile.getSourcePath()); + alreadyParsed.add(moduleBuildFilePath); + alreadyParsed.addAll(skipResourceScanDirs); + List mainSources = parseMainSources(baseDir, currentProject, moduleBuildFile, resources, javaParserBuilder.clone(), rp, provenanceMarkers, alreadyParsed, executionContext); + List testSources = parseTestSources(baseDir, currentProject, moduleBuildFile, javaParserBuilder.clone(), rp, provenanceMarkers, alreadyParsed, executionContext, resources); + // Collect the dirs of modules parsed in previous steps + + // parse other project resources + Stream parsedResourceFiles = rp.parse(moduleBuildFilePath.getParent(), resources, alreadyParsed) + // FIXME: handle generated sources + .map(mavenMojoProjectParserPrivateMethods.addProvenance(baseDir, provenanceMarkers, null)); + // 157:169 + List mainAndTestSources = mergeAndFilterExcluded(baseDir, parserProperties.getIgnoredPathPatterns(), mainSources, testSources); + List resourceFilesList = parsedResourceFiles.toList(); + sourceFiles.addAll(mainAndTestSources); + sourceFiles.addAll(resourceFilesList); + + return sourceFiles; + } + + private List mergeAndFilterExcluded(Path baseDir, Set exclusions, List mainSources, List testSources) { + List pathMatchers = exclusions.stream() + .map(pattern -> baseDir.getFileSystem().getPathMatcher("glob:" + pattern)) + .toList(); + if(pathMatchers.isEmpty()) { + return Stream.concat(mainSources.stream(), testSources.stream()).toList(); + } + return new ArrayList<>(Stream.concat(mainSources.stream(), testSources.stream()) + .filter(s -> isNotExcluded(baseDir, pathMatchers, s)) + .toList()); + } + + private static boolean isNotExcluded(Path baseDir, List exclusions, SourceFile s) { + return exclusions.stream() + .noneMatch(pm -> pm.matches(baseDir.resolve(s.getSourcePath()).toAbsolutePath().normalize())); + } + + private List parseTestSources(Path baseDir, MavenProject mavenProject, Xml.Document moduleBuildFile, JavaParser.Builder javaParserBuilder, RewriteResourceParser rp, List provenanceMarkers, Set alreadyParsed, ExecutionContext executionContext, List resources) { + return mavenMojoProjectParserPrivateMethods.processTestSources(baseDir, moduleBuildFile, javaParserBuilder, rp, provenanceMarkers, alreadyParsed, executionContext, mavenProject, resources); + } + + /** + */ + private List parseMainSources(Path baseDir, MavenProject mavenProject, Xml.Document moduleBuildFile, List resources, JavaParser.Builder javaParserBuilder, RewriteResourceParser rp, List provenanceMarkers, Set alreadyParsed, ExecutionContext executionContext) { + // MavenMojoProjectParser#processMainSources(..) takes MavenProject + // it reads from it: + // - mavenProject.getBuild().getDirectory() + // - mavenProject.getBuild().getSourceDirectory() + // - mavenProject.getCompileClasspathElements() --> The classpath of the given project/module + // - mavenProject.getBasedir().toPath() + return mavenMojoProjectParserPrivateMethods.processMainSources(baseDir, resources, moduleBuildFile, javaParserBuilder, rp, provenanceMarkers, alreadyParsed, executionContext, mavenProject); +// return invokeProcessMethod(baseDir, moduleBuildFile, javaParserBuilder, rp, provenanceMarkers, alreadyParsed, executionContext, "processMainSources"); + } + + private Set pathsToOtherMavenProjects(MavenProject mavenProject, Path moduleBuildFile) { + return mavenProject.getCollectedProjects().stream() + .filter(p -> !p.getFile().toPath().toString().equals(moduleBuildFile.toString())) + .map(p -> p.getFile().toPath().getParent()) + .collect(Collectors.toSet()); + } + +} diff --git a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteProjectParserTest.java b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteProjectParserTest.java index 036bfc9c6..fe9ae4395 100644 --- a/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteProjectParserTest.java +++ b/sbm-support-rewrite/src/test/java/org/springframework/sbm/parsers/RewriteProjectParserTest.java @@ -29,10 +29,7 @@ import org.springframework.context.ApplicationEventPublisher; import org.springframework.core.io.DefaultResourceLoader; import org.springframework.core.io.Resource; -import org.springframework.sbm.parsers.maven.BuildFileParser; -import org.springframework.sbm.parsers.maven.MavenProjectAnalyzer; -import org.springframework.sbm.parsers.maven.MavenProvenanceMarkerFactory; -import org.springframework.sbm.parsers.maven.ProvenanceMarkerFactory; +import org.springframework.sbm.parsers.maven.*; import org.springframework.sbm.scopes.ScanScope; import org.springframework.sbm.test.util.DummyResource; import org.springframework.sbm.utils.ResourceUtil; @@ -94,10 +91,11 @@ void parseSimpleMavenProject(@TempDir Path tempDir) { ParserProperties parserProperties = new ParserProperties(); ModuleParser mavenMojoParserPrivateMethods = new ModuleParser(); ExecutionContext executionContext = new InMemoryExecutionContext(t -> {throw new RuntimeException(t);}); + MavenModuleParser mavenModuleParser = new MavenModuleParser(parserProperties, mavenMojoParserPrivateMethods); RewriteProjectParser projectParser = new RewriteProjectParser( new ProvenanceMarkerFactory(new MavenProvenanceMarkerFactory()), new BuildFileParser(), - new SourceFileParser(parserProperties, mavenMojoParserPrivateMethods), + new SourceFileParser(mavenModuleParser), new StyleDetector(), parserProperties, mock(ParsingEventListener.class), From a5a129f8f5780c78a879be354940bf0b3126413e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Kr=C3=BCger?= Date: Sun, 1 Oct 2023 01:09:16 +0200 Subject: [PATCH 20/32] Cleanup --- .../sbm/project/resource/ProjectResourceSetHolder.java | 1 - .../org/springframework/sbm/recipes/RewriteRecipeDiscovery.java | 1 - 2 files changed, 2 deletions(-) diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/project/resource/ProjectResourceSetHolder.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/project/resource/ProjectResourceSetHolder.java index 4bff0b69f..2112fecb8 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/project/resource/ProjectResourceSetHolder.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/project/resource/ProjectResourceSetHolder.java @@ -17,7 +17,6 @@ import lombok.RequiredArgsConstructor; import org.openrewrite.ExecutionContext; -import org.springframework.stereotype.Component; import java.util.ArrayList; diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/recipes/RewriteRecipeDiscovery.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/recipes/RewriteRecipeDiscovery.java index 008b53e5f..7b8f3fb38 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/recipes/RewriteRecipeDiscovery.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/recipes/RewriteRecipeDiscovery.java @@ -42,7 +42,6 @@ * @author Fabian Krüger */ @Slf4j - @RequiredArgsConstructor public class RewriteRecipeDiscovery { From 1593b77c96f54b83d7c1f9fd504bcdf60c337f50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Kr=C3=BCger?= Date: Sun, 1 Oct 2023 01:09:24 +0200 Subject: [PATCH 21/32] Fix javadoc --- .../springframework/sbm/parsers/maven/BuildFileParser.java | 1 - .../sbm/parsers/maven/ProvenanceMarkerFactory.java | 4 +--- .../sbm/project/resource/ProjectResourceSet.java | 2 +- 3 files changed, 2 insertions(+), 5 deletions(-) diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/BuildFileParser.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/BuildFileParser.java index c178e9db2..bcab0f97b 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/BuildFileParser.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/BuildFileParser.java @@ -49,7 +49,6 @@ class BuildFileParser { /** * Parse a list of Maven Pom files to a Map of {@code Path} and their parsed {@link Xml.Document}s. * The {@link Xml.Document}s are marked with {@link org.openrewrite.maven.tree.MavenResolutionResult} and the provided provenance markers. - * Reimplements {@link org.openrewrite.maven.MavenMojoProjectParser#parseMaven(List, Map, ExecutionContext)}. * * @param baseDir the {@link Path} to the root of the scanned project * @param buildFiles the list of resources for relevant pom files. diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/ProvenanceMarkerFactory.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/ProvenanceMarkerFactory.java index 911000ce6..b5cddfcf3 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/ProvenanceMarkerFactory.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/ProvenanceMarkerFactory.java @@ -35,9 +35,7 @@ public class ProvenanceMarkerFactory { private final MavenProvenanceMarkerFactory markerFactory; /** - * Reuses {@link MavenMojoProjectParser#generateProvenance(MavenProject)} to create {@link Marker}s for pom files in - * provided {@code parserContext}. - * + * Create Provenance markers * @return the map of pom.xml {@link Resource}s and their {@link Marker}s. */ public Map> generateProvenanceMarkers(Path baseDir, ParserContext parserContext) { diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/project/resource/ProjectResourceSet.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/project/resource/ProjectResourceSet.java index f44767b6d..1dfcb3c52 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/project/resource/ProjectResourceSet.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/project/resource/ProjectResourceSet.java @@ -36,7 +36,7 @@ public class ProjectResourceSet { /** * @deprecated - * Use {@link ProjectResourceSetFactory#create(Path, List) >)} instead. + * Use {@link ProjectResourceSetFactory#create(Path, List)} instead. */ @Deprecated public ProjectResourceSet(List> projectResources, ExecutionContext executionContext, RewriteMigrationResultMerger migrationResultMerger) { From f90af26499c84ffe1edcc209c4e9bd6cef92867f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Kr=C3=BCger?= Date: Sun, 1 Oct 2023 01:09:30 +0200 Subject: [PATCH 22/32] Remove generated method --- .../java/org/springframework/sbm/parsers/ParserContext.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/ParserContext.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/ParserContext.java index 84ccb3038..81d5f55a9 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/ParserContext.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/ParserContext.java @@ -65,10 +65,6 @@ public Xml.Document getXmlDocument(Path path) { return pathDocumentMap.get(path); } - public Map getPathDocumentMap() { - return pathDocumentMap; - } - public void setParsedBuildFiles(List xmlDocuments) { this.pathDocumentMap = xmlDocuments.stream() .peek(doc -> addSourceFileToModel(baseDir, getSortedProjects(), doc)) From 1e9bd3791748c57fb72e9f50ab0a4c1dc9f6ccd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Kr=C3=BCger?= Date: Sun, 1 Oct 2023 01:09:37 +0200 Subject: [PATCH 23/32] Remove unused dependency --- sbm-support-rewrite/pom.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sbm-support-rewrite/pom.xml b/sbm-support-rewrite/pom.xml index 2dff14a08..c5cd60f6c 100644 --- a/sbm-support-rewrite/pom.xml +++ b/sbm-support-rewrite/pom.xml @@ -157,9 +157,9 @@ provided - org.apache.maven - maven-model - 3.9.1 + javax.xml.bind + jaxb-api + ${jaxb-api.version} From 3ae784558237aa728434477264934376ac0fd835 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Kr=C3=BCger?= Date: Sun, 1 Oct 2023 01:09:39 +0200 Subject: [PATCH 24/32] Remove unused properties --- sbm-support-rewrite/pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/sbm-support-rewrite/pom.xml b/sbm-support-rewrite/pom.xml index c5cd60f6c..fe8f1f8f9 100644 --- a/sbm-support-rewrite/pom.xml +++ b/sbm-support-rewrite/pom.xml @@ -22,7 +22,6 @@ UTF-8 3.1.3 8.5.1 - 0.15.0-SNAPSHOT 5.3.2 3.9.1 1.9.13 From 6d9bfe641eda046d57dc99b9d52e6bbc9cd4b7f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Kr=C3=BCger?= Date: Sun, 1 Oct 2023 01:09:42 +0200 Subject: [PATCH 25/32] Cleanup pom --- sbm-support-rewrite/pom.xml | 82 +++++++++++-------------------------- 1 file changed, 23 insertions(+), 59 deletions(-) diff --git a/sbm-support-rewrite/pom.xml b/sbm-support-rewrite/pom.xml index fe8f1f8f9..f72cfc5c2 100644 --- a/sbm-support-rewrite/pom.xml +++ b/sbm-support-rewrite/pom.xml @@ -160,6 +160,29 @@ jaxb-api ${jaxb-api.version} + + + org.codehaus.plexus + plexus-sec-dispatcher + 2.0 + + + + org.apache.maven + maven-embedder + ${maven.version} + + + org.sonatype.plexus + plexus-cipher + + + + + commons-cli + commons-cli + 1.4 + org.openrewrite.maven @@ -203,9 +226,6 @@ ${maven.version} test - - - org.codehaus.plexus plexus-cipher @@ -218,11 +238,6 @@ ${maven-invoker.version} test - - javax.xml.bind - jaxb-api - ${jaxb-api.version} - org.springframework.boot spring-boot-starter-test @@ -234,31 +249,6 @@ ${junit-pioneer.version} test - - - - - org.codehaus.plexus - plexus-sec-dispatcher - 2.0 - - - - org.apache.maven - maven-embedder - ${maven.version} - - - org.sonatype.plexus - plexus-cipher - - - - - commons-cli - commons-cli - 1.4 - @@ -321,19 +311,6 @@ org.codehaus.mojo versions-maven-plugin 2.16.0 - - - - - - - - - - - - - com.mycila @@ -428,19 +405,6 @@ limitations under the License. true - - org.apache.maven.plugins - maven-source-plugin - 3.3.0 - - - attach-sources - - jar - - - - org.apache.maven.plugins maven-release-plugin From 9b076070f2835f7a82dca6c4cdbbd5404e8096d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Kr=C3=BCger?= Date: Sun, 1 Oct 2023 01:09:46 +0200 Subject: [PATCH 26/32] WIP: delombokify --- sbm-support-rewrite/pom.xml | 42 +++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/sbm-support-rewrite/pom.xml b/sbm-support-rewrite/pom.xml index f72cfc5c2..ba3a06e91 100644 --- a/sbm-support-rewrite/pom.xml +++ b/sbm-support-rewrite/pom.xml @@ -432,6 +432,48 @@ limitations under the License. delombok + + + + maven-resources-plugin + 3.3.1 + + + copy-java-sources + generate-sources + + copy-resources + + + ${basedir}/target/delombok + + + ${basedir}/src/main/java + + + + + + + + org.projectlombok + lombok-maven-plugin + 1.18.20.0 + + + generate-sources + + delombok + + + ${basedir}/target/delomboked + ${basedir}/target/delombok + + + + + + artifactory From 3f39bcf40bb72fbde6603d3ccafee22d904a9d90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Kr=C3=BCger?= Date: Sun, 1 Oct 2023 01:10:46 +0200 Subject: [PATCH 27/32] Remove duplicate plugin --- sbm-support-rewrite/pom.xml | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/sbm-support-rewrite/pom.xml b/sbm-support-rewrite/pom.xml index ba3a06e91..32b59fe4c 100644 --- a/sbm-support-rewrite/pom.xml +++ b/sbm-support-rewrite/pom.xml @@ -405,28 +405,6 @@ limitations under the License. true - - org.apache.maven.plugins - maven-release-plugin - 3.0.0 - - sonatype - false - @{project.version} - true - - - - org.apache.maven.plugins - maven-release-plugin - 3.0.0 - - sonatype - false - @{project.version} - true - - From 711bb69bff4724ba8e06f07079e47b234e960356 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fabian=20Kr=C3=BCger?= Date: Mon, 9 Oct 2023 11:44:05 +0200 Subject: [PATCH 28/32] Cleanup * Remove generated comments * SuppressWarnings * Refactorings --- .../parsers/maven/MavenConfigFileParser.java | 45 ++----------------- 1 file changed, 3 insertions(+), 42 deletions(-) diff --git a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/MavenConfigFileParser.java b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/MavenConfigFileParser.java index b3d03861f..29c4d13e2 100644 --- a/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/MavenConfigFileParser.java +++ b/sbm-support-rewrite/src/main/java/org/springframework/sbm/parsers/maven/MavenConfigFileParser.java @@ -38,112 +38,72 @@ */ class MavenConfigFileParser { - /** Constant ALTERNATE_POM_FILE='f' */ private static final char ALTERNATE_POM_FILE = 'f'; - /** Constant BATCH_MODE='B' */ private static final char BATCH_MODE = 'B'; - /** Constant SET_USER_PROPERTY='D' */ private static final char SET_USER_PROPERTY = 'D'; - /** - * @deprecated Use {@link #SET_USER_PROPERTY} - */ - @Deprecated - private static final char SET_SYSTEM_PROPERTY = SET_USER_PROPERTY; - - /** Constant OFFLINE='o' */ private static final char OFFLINE = 'o'; - /** Constant QUIET='q' */ private static final char QUIET = 'q'; - /** Constant DEBUG='X' */ private static final char DEBUG = 'X'; - /** Constant ERRORS='e' */ private static final char ERRORS = 'e'; - /** Constant HELP='h' */ private static final char HELP = 'h'; - /** Constant VERSION='v' */ private static final char VERSION = 'v'; - /** Constant SHOW_VERSION='V' */ private static final char SHOW_VERSION = 'V'; - /** Constant NON_RECURSIVE='N' */ private static final char NON_RECURSIVE = 'N'; - /** Constant UPDATE_SNAPSHOTS='U' */ private static final char UPDATE_SNAPSHOTS = 'U'; - /** Constant ACTIVATE_PROFILES='P' */ private static final char ACTIVATE_PROFILES = 'P'; - /** Constant SUPRESS_SNAPSHOT_UPDATES="nsu" */ private static final String SUPRESS_SNAPSHOT_UPDATES = "nsu"; - /** Constant CHECKSUM_FAILURE_POLICY='C' */ private static final char CHECKSUM_FAILURE_POLICY = 'C'; - /** Constant CHECKSUM_WARNING_POLICY='c' */ private static final char CHECKSUM_WARNING_POLICY = 'c'; - /** Constant ALTERNATE_USER_SETTINGS='s' */ private static final char ALTERNATE_USER_SETTINGS = 's'; - /** Constant ALTERNATE_GLOBAL_SETTINGS="gs" */ private static final String ALTERNATE_GLOBAL_SETTINGS = "gs"; - /** Constant ALTERNATE_USER_TOOLCHAINS='t' */ private static final char ALTERNATE_USER_TOOLCHAINS = 't'; - /** Constant ALTERNATE_GLOBAL_TOOLCHAINS="gt" */ private static final String ALTERNATE_GLOBAL_TOOLCHAINS = "gt"; - /** Constant FAIL_FAST="ff" */ private static final String FAIL_FAST = "ff"; - /** Constant FAIL_AT_END="fae" */ private static final String FAIL_AT_END = "fae"; - /** Constant FAIL_NEVER="fn" */ private static final String FAIL_NEVER = "fn"; - /** Constant RESUME_FROM="rf" */ private static final String RESUME_FROM = "rf"; - /** Constant PROJECT_LIST="pl" */ private static final String PROJECT_LIST = "pl"; - /** Constant ALSO_MAKE="am" */ private static final String ALSO_MAKE = "am"; - /** Constant ALSO_MAKE_DEPENDENTS="amd" */ private static final String ALSO_MAKE_DEPENDENTS = "amd"; - /** Constant LOG_FILE="l" */ private static final String LOG_FILE = "l"; - /** Constant ENCRYPT_MASTER_PASSWORD="emp" */ private static final String ENCRYPT_MASTER_PASSWORD = "emp"; - /** Constant ENCRYPT_PASSWORD="ep" */ private static final String ENCRYPT_PASSWORD = "ep"; - /** Constant THREADS="T" */ private static final String THREADS = "T"; - /** Constant BUILDER="b" */ private static final String BUILDER = "b"; - /** Constant NO_TRANSFER_PROGRESS="ntp" */ private static final String NO_TRANSFER_PROGRESS = "ntp"; - /** Constant COLOR="color" */ private static final String COLOR = "color"; private static final String MVN_MAVEN_CONFIG = ".mvn/maven.config"; public List getActivatedProfiles(Path baseDir) { @@ -153,7 +113,7 @@ public List getActivatedProfiles(Path baseDir) { String[] args = readFile(lines); return parse(args).stream() .filter(o -> String.valueOf(ACTIVATE_PROFILES).equals(o.getOpt())) - .map(o -> o.getValue()) + .map(Option::getValue) .map(v -> v.split(",")) .flatMap(Arrays::stream) .map(String::trim) @@ -173,7 +133,7 @@ public Map getUserProperties(Path baseDir) { String[] args = readFile(lines); return parse(args).stream() .filter(o -> String.valueOf(SET_USER_PROPERTY).equals(o.getOpt())) - .map(o -> o.getValue()) + .map(Option::getValue) .filter(v -> v.contains("=")) .map(v -> v.split("=")) .collect(Collectors.toMap(a -> a[0], a -> a[1])); @@ -377,6 +337,7 @@ public List