diff --git a/src/main/java/org/openrewrite/maven/AbstractRewriteBaseRunMojo.java b/src/main/java/org/openrewrite/maven/AbstractRewriteBaseRunMojo.java index 389f77b8..5c72634e 100644 --- a/src/main/java/org/openrewrite/maven/AbstractRewriteBaseRunMojo.java +++ b/src/main/java/org/openrewrite/maven/AbstractRewriteBaseRunMojo.java @@ -237,8 +237,8 @@ protected LargeSourceSet loadSourceSet(Path repositoryRoot, Environment env, Exe //Parse and collect source files from each project in the maven session. MavenMojoProjectParser projectParser = new MavenMojoProjectParser(getLog(), repositoryRoot, pomCacheEnabled, pomCacheDirectory, runtime, skipMavenParsing, getExclusions(), getPlainTextMasks(), sizeThresholdMb, mavenSession, settingsDecrypter, runPerSubmodule, true); - Stream sourceFiles = projectParser.listSourceFiles(project, styles, ctx); - List sourceFileList = sourcesWithAutoDetectedStyles(sourceFiles); + Stream sourceFiles = projectParser.listSourceFiles(project, ctx); + List sourceFileList = sourcesWithAutoDetectedStyles(sourceFiles, styles); return new InMemoryLargeSourceSet(sourceFileList); } @@ -262,7 +262,7 @@ protected List runRecipe(Recipe recipe, LargeSourceSet sourceSet, Execut }).collect(toList()); } - private List sourcesWithAutoDetectedStyles(Stream sourceFiles) { + private List sourcesWithAutoDetectedStyles(Stream sourceFiles, List configuredStyles) { org.openrewrite.java.style.Autodetect.Detector javaDetector = org.openrewrite.java.style.Autodetect.detector(); org.openrewrite.kotlin.style.Autodetect.Detector kotlinDetector = org.openrewrite.kotlin.style.Autodetect.detector(); org.openrewrite.xml.style.Autodetect.Detector xmlDetector = org.openrewrite.xml.style.Autodetect.detector(); @@ -283,16 +283,21 @@ private List sourcesWithAutoDetectedStyles(Stream source stylesByType.put(K.CompilationUnit.class, kotlinDetector.build()); stylesByType.put(Xml.Document.class, xmlDetector.build()); - return ListUtils.map(sourceFileList, applyAutodetectedStyle(stylesByType)); + return ListUtils.map(sourceFileList, applyStyles(stylesByType, configuredStyles)); } - private UnaryOperator applyAutodetectedStyle(Map, NamedStyles> stylesByType) { + private UnaryOperator applyStyles(Map, NamedStyles> stylesByType, List configuredStyles) { return before -> { + // Apply auto-detected styles first for (Map.Entry, NamedStyles> styleTypeEntry : stylesByType.entrySet()) { if (styleTypeEntry.getKey().isAssignableFrom(before.getClass())) { before = before.withMarkers(before.getMarkers().add(styleTypeEntry.getValue())); } } + // Apply configured styles last so they take precedence with "last wins" semantics + for (NamedStyles configuredStyle : configuredStyles) { + before = before.withMarkers(before.getMarkers().add(configuredStyle)); + } return before; }; } diff --git a/src/main/java/org/openrewrite/maven/MavenMojoProjectParser.java b/src/main/java/org/openrewrite/maven/MavenMojoProjectParser.java index 751975fd..e16ba7b7 100644 --- a/src/main/java/org/openrewrite/maven/MavenMojoProjectParser.java +++ b/src/main/java/org/openrewrite/maven/MavenMojoProjectParser.java @@ -69,7 +69,6 @@ import org.openrewrite.maven.utilities.MavenWrapper; import org.openrewrite.polyglot.OmniParser; import org.openrewrite.quark.QuarkParser; -import org.openrewrite.style.NamedStyles; import org.openrewrite.text.PlainTextParser; import org.openrewrite.xml.tree.Xml; @@ -164,13 +163,13 @@ public MavenMojoProjectParser(Log logger, Path baseDir, boolean pomCacheEnabled, this.parseAdditionalResources = parseAdditionalResources; } - public Stream listSourceFiles(MavenProject mavenProject, List styles, + public Stream listSourceFiles(MavenProject mavenProject, ExecutionContext ctx) throws DependencyResolutionRequiredException, MojoExecutionException, MojoFailureException { if (runPerSubmodule) { //If running per submodule, parse the source files for only the current project. List projectProvenance = generateProvenance(mavenProject); Xml.Document maven = parseMaven(mavenProject, projectProvenance, ctx); - return listSourceFiles(mavenProject, maven, projectProvenance, styles, ctx); + return listSourceFiles(mavenProject, maven, projectProvenance, ctx); } //If running across all projects, iterate and parse source files from each project Map> projectProvenances = mavenSession.getProjects().stream() @@ -180,20 +179,20 @@ public Stream listSourceFiles(MavenProject mavenProject, List { List projectProvenance = projectProvenances.get(project); try { - return listSourceFiles(project, projectMap.get(project), projectProvenance, styles, ctx); + return listSourceFiles(project, projectMap.get(project), projectProvenance, ctx); } catch (DependencyResolutionRequiredException | MojoExecutionException e) { throw sneakyThrow(e); } }); } - public Stream listSourceFiles(MavenProject mavenProject, Xml.@Nullable Document maven, List projectProvenance, List styles, + public Stream listSourceFiles(MavenProject mavenProject, Xml.@Nullable Document maven, List projectProvenance, ExecutionContext ctx) throws DependencyResolutionRequiredException, MojoExecutionException { - return listSourceFiles(mavenProject, maven, projectProvenance, Arrays.asList(MAIN, TEST), styles, ctx); + return listSourceFiles(mavenProject, maven, projectProvenance, Arrays.asList(MAIN, TEST), ctx); } public Stream listSourceFiles(MavenProject mavenProject, Xml.@Nullable Document maven, List projectProvenance, List scopes, - List styles, ExecutionContext ctx) throws DependencyResolutionRequiredException, MojoExecutionException { + ExecutionContext ctx) throws DependencyResolutionRequiredException, MojoExecutionException { Stream sourceFiles = Stream.empty(); Set alreadyParsed = new HashSet<>(); @@ -203,10 +202,8 @@ public Stream listSourceFiles(MavenProject mavenProject, Xml.@Nullab } JavaParser.Builder javaParserBuilder = JavaParser.fromJavaVersion() - .styles(styles) .logCompilationWarningsAndErrors(false); - // todo, add styles from autoDetect KotlinParser.Builder kotlinParserBuilder = KotlinParser.builder(); if (scopes.contains(MAIN)) {