goals;
- @Null
- private String phase;
- @Null
- private String configuration;
- }
-}
+}
\ No newline at end of file
diff --git a/components/sbm-core/src/main/java/org/springframework/sbm/build/impl/Refactoring.java b/components/sbm-core/src/main/java/org/springframework/sbm/build/impl/MavenBuildFileRefactoring.java
similarity index 91%
rename from components/sbm-core/src/main/java/org/springframework/sbm/build/impl/Refactoring.java
rename to components/sbm-core/src/main/java/org/springframework/sbm/build/impl/MavenBuildFileRefactoring.java
index f978d4bec..c3c5bbc89 100644
--- a/components/sbm-core/src/main/java/org/springframework/sbm/build/impl/Refactoring.java
+++ b/components/sbm-core/src/main/java/org/springframework/sbm/build/impl/MavenBuildFileRefactoring.java
@@ -23,14 +23,13 @@
import org.openrewrite.xml.tree.Xml;
import org.springframework.sbm.project.resource.RewriteSourceFileHolder;
import org.springframework.sbm.support.openrewrite.GenericOpenRewriteRecipe;
-import org.springframework.util.ReflectionUtils;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
@RequiredArgsConstructor
-class Refactoring {
+class MavenBuildFileRefactoring
{
private final RewriteSourceFileHolder pom;
@@ -57,7 +56,9 @@ private List executeRecipe(Recipe recipe) {
private void processResults(List results) {
if (!results.isEmpty()) {
- results.forEach(c -> processResult(c));
+ // FIXME: Works only on a single POM and does not apply to all other resources
+ pom.replaceWith((Xml.Document) results.get(0).getAfter());
+ // results.forEach(c -> processResult(c));
}
}
diff --git a/components/sbm-core/src/main/java/org/springframework/sbm/build/impl/OpenRewriteMavenBuildFile.java b/components/sbm-core/src/main/java/org/springframework/sbm/build/impl/OpenRewriteMavenBuildFile.java
index 43dc45893..c554caa8b 100644
--- a/components/sbm-core/src/main/java/org/springframework/sbm/build/impl/OpenRewriteMavenBuildFile.java
+++ b/components/sbm-core/src/main/java/org/springframework/sbm/build/impl/OpenRewriteMavenBuildFile.java
@@ -15,6 +15,7 @@
*/
package org.springframework.sbm.build.impl;
+import com.fasterxml.jackson.core.JsonProcessingException;
import lombok.extern.slf4j.Slf4j;
import org.openrewrite.ExecutionContext;
import org.openrewrite.Parser;
@@ -24,12 +25,16 @@
import org.openrewrite.internal.lang.Nullable;
import org.openrewrite.marker.Markers;
import org.openrewrite.maven.*;
+import org.openrewrite.maven.internal.MavenXmlMapper;
import org.openrewrite.maven.tree.MavenResolutionResult;
import org.openrewrite.maven.tree.Parent;
import org.openrewrite.maven.tree.ResolvedDependency;
import org.openrewrite.maven.tree.ResolvedManagedDependency;
import org.openrewrite.maven.tree.Scope;
+import org.openrewrite.xml.ChangeTagValueVisitor;
import org.openrewrite.xml.tree.Xml;
+import org.openrewrite.xml.tree.Xml.Tag;
+
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.sbm.build.api.BuildFile;
import org.springframework.sbm.build.api.DependenciesChangedEvent;
@@ -70,7 +75,8 @@
public class OpenRewriteMavenBuildFile extends RewriteSourceFileHolder implements BuildFile {
private final ApplicationEventPublisher eventPublisher;
- private PluginRepositoryHandler pluginRepositoryHandler = new PluginRepositoryHandler();
+ private final PluginRepositoryHandler pluginRepositoryHandler = new PluginRepositoryHandler();
+ private final MavenBuildFileRefactoring refactoring ;
// TODO: #7 clarify if RefreshPomModel is still required?
// Execute separately since RefreshPomModel caches the refreshed maven files after the first visit
@@ -105,7 +111,7 @@ protected List visit(List before, ExecutionContext ctx)
for (int i = 0; i < newMavenFiles.size(); i++) {
Optional mavenModels = MavenBuildFileUtil.findMavenResolution(mavenFiles.get(i));
Optional newMavenModels = MavenBuildFileUtil.findMavenResolution(newMavenFiles.get(i));
- mavenFiles.get(i).withMarkers(Markers.build(Arrays.asList(newMavenModels.get())));
+ mavenFiles.get(i).withMarkers(Markers.build(List.of(newMavenModels.get())));
// FIXME: 497 verify correctness
mavenFiles.set(i, newMavenFiles.get(i));
}
@@ -143,22 +149,23 @@ public OpenRewriteMavenBuildFile(Path absoluteProjectPath,
super(absoluteProjectPath, sourceFile);
this.eventPublisher = eventPublisher;
this.executionContext = executionContext;
+ this.refactoring = new MavenBuildFileRefactoring<>(this.getResource());
}
public void apply(Recipe recipe) {
// FIXME: #7 Make ExecutionContext a Spring Bean and caching configurable, also if the project root is used as workdir it must be added to .gitignore
- // FIXME: #7 this made it veeery slow
//executionContext.putMessage("org.openrewrite.maven.pomCache", new RocksdbMavenPomCache(this.getAbsoluteProjectDir()));
- List result = recipe.run(List.of(getSourceFile()), executionContext).getResults();
- if (!result.isEmpty()) {
- replaceWith((Xml.Document) result.get(0).getAfter());
- }
+ refactoring.execute(recipe);
}
public MavenResolutionResult getPom() {
return MavenBuildFileUtil.findMavenResolution(getSourceFile()).get();
}
+ public RewriteSourceFileHolder getResource() {
+ return this;
+ }
+
@Override
public void addDependency(Dependency dependency) {
if (!containsDependency(dependency)) {
@@ -263,7 +270,6 @@ public List getDeclaredDependencies(Scope... scopes) {
@Override
public List getRequestedDependencies() {
List requestedDependencies = getPom().getPom().getRequestedDependencies();
-
// FIXME: #7 use getPom().getDependencies() instead ?
List declaredDependenciesWithEffectiveVersions = requestedDependencies.stream()
.map(d -> mapDependency(d))
@@ -312,6 +318,8 @@ public List getRequestedDependencies() {
/**
* {@inheritDoc}
+ *
+ * TODO: #497 Test with declared and transitive dependencies
*/
@Override
public Set getEffectiveDependencies(Scope scope) {
@@ -574,22 +582,22 @@ public boolean hasPlugin(Plugin plugin) {
@Override
public void addPlugin(Plugin plugin) {
- apply(new AddMavenPlugin(plugin));
+ apply(new AddMavenPlugin((OpenRewriteMavenPlugin) plugin));
}
@Override
public List getSourceFolders() {
- return Arrays.asList(getAbsolutePath().getParent().resolve(JAVA_SOURCE_FOLDER));
+ return List.of(getAbsolutePath().getParent().resolve(JAVA_SOURCE_FOLDER));
}
@Override
public List getResourceFolders() {
- return Arrays.asList(getAbsolutePath().getParent().resolve(RESOURCE_FOLDER));
+ return List.of(getAbsolutePath().getParent().resolve(RESOURCE_FOLDER));
}
@Override
public List getTestResourceFolders() {
- return Arrays.asList(getAbsolutePath().getParent().resolve(RESOURCE_TEST_FOLDER));
+ return List.of(getAbsolutePath().getParent().resolve(RESOURCE_TEST_FOLDER));
}
@Override
@@ -602,21 +610,23 @@ public List getClasspath() {
@Override
public List getTestSourceFolders() {
- return Arrays.asList(getAbsolutePath().getParent().resolve(JAVA_TEST_SOURCE_FOLDER));
+ return List.of(getAbsolutePath().getParent().resolve(JAVA_TEST_SOURCE_FOLDER));
}
final public String getProperty(String key) {
- return getPom().getPom().getProperties().get(key);
+ return getPom().getPom().getRequested().getProperties().get(key);
}
+ @Override
+ final public void deleteProperty(String key){
+ apply(new RemoveProperty(key));
+ apply(new RefreshPomModel());
+ }
+
final public void setProperty(String key, String value) {
- if (value == null) {
- apply(new RemoveProperty(key));
- } else {
- String current = getProperty(key);
- apply(current == null ? new AddProperty(key, value) : new ChangePropertyValue(key, value, false));
- }
- apply(new RefreshPomModel());
+ String current = getProperty(key);
+ apply(current == null ? new ChangePropertyValue(key, value, true) : new ChangePropertyValue(key, value, false));
+ apply(new RefreshPomModel());
}
@Override
@@ -654,6 +664,7 @@ public String getArtifactId() {
public String getVersion() {
return resolve(getPom().getPom().getVersion());
}
+
@Override
public String getCoordinates() {
return getGroupId() + ":" + getArtifactId() + ":" + getVersion();
@@ -754,45 +765,9 @@ private boolean anyRegexMatchesCoordinate(Plugin p, String... regex) {
@Override
public List getPlugins() {
-
- List plugins = new ArrayList<>();
-
- MavenVisitor mavenVisitor = new MavenVisitor() {
-
- @Override
- public Xml.Document visitDocument(Xml.Document maven, ExecutionContext ctx) {
- Xml.Tag mavenRoot = maven.getRoot();
- Optional build = mavenRoot.getChild("build");
- if (build.isPresent()) {
- Xml.Tag buildTag = build.get();
- Optional pluginTags = buildTag.getChild("plugins");
- if (pluginTags.isPresent()) {
- List plugin = pluginTags.get().getChildren("plugin");
- List pluginList = plugin.stream()
- .map(this::mapToPlugin)
- .collect(Collectors.toList());
- plugins.addAll(pluginList);
- }
- }
- return null;
- }
-
- private Plugin mapToPlugin(Xml.Tag tag) {
- String groupId = tag.getChild("groupId").get().getValue().get();
- String artifactId = tag.getChild("artifactId").get().getValue().get();
- Optional versionTag = tag.getChild("version");
- String version = null;
- if (versionTag.isPresent()) {
- version = versionTag.get().getValue().get();
- }
- Plugin plugin = new Plugin(groupId, artifactId, version, List.of(), "", "");
- return plugin;
- }
- };
-
- mavenVisitor.visitDocument(getSourceFile(), executionContext);
-
- return plugins;
+ return getPom().getPom().getRequested().getPlugins().stream()
+ .map(p -> new OpenRewriteMavenPlugin(p, getResource(), refactoring))
+ .collect(Collectors.toList());
}
/**
@@ -830,6 +805,14 @@ public void removePlugins(String... coordinates) {
}
}
+ @Override
+ public Optional findPlugin(String groupId, String artifactId){
+ return getPlugins()
+ .stream()
+ .filter(plugin -> plugin.getGroupId().equals(groupId) &&
+ plugin.getArtifactId().equals(artifactId))
+ .findAny();
+ }
private String resolve(String expression) {
return getPom().getPom().getValue(expression);
diff --git a/components/sbm-core/src/main/java/org/springframework/sbm/build/impl/OpenRewriteMavenPlugin.java b/components/sbm-core/src/main/java/org/springframework/sbm/build/impl/OpenRewriteMavenPlugin.java
new file mode 100644
index 000000000..9b93f9fb6
--- /dev/null
+++ b/components/sbm-core/src/main/java/org/springframework/sbm/build/impl/OpenRewriteMavenPlugin.java
@@ -0,0 +1,193 @@
+/*
+ * Copyright 2021 - 2022 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.springframework.sbm.build.impl;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+import javax.validation.constraints.NotNull;
+import javax.validation.constraints.Null;
+
+import com.fasterxml.jackson.annotation.JsonAnyGetter;
+import com.fasterxml.jackson.annotation.JsonAnySetter;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.fasterxml.jackson.annotation.JsonInclude;
+import com.fasterxml.jackson.annotation.JsonInclude.Include;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlElementWrapper;
+import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+import lombok.Singular;
+import org.openrewrite.maven.ChangePluginConfiguration;
+import org.openrewrite.maven.internal.MavenXmlMapper;
+import org.openrewrite.xml.tree.Xml;
+import org.openrewrite.xml.tree.Xml.Document;
+
+import org.springframework.sbm.build.api.Plugin;
+import org.springframework.sbm.project.resource.RewriteSourceFileHolder;
+
+@Getter
+@Setter
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+@JacksonXmlRootElement(localName = "plugin")
+@JsonInclude(Include.NON_NULL)
+public class OpenRewriteMavenPlugin implements Plugin {
+
+ @NotNull
+ private String groupId;
+
+ @NotNull
+ private String artifactId;
+
+ private String version;
+
+ @Singular("execution")
+ private List executions;
+
+ private OpenRewriteMavenPluginConfiguration configuration;
+
+ @JsonIgnore
+ private RewriteSourceFileHolder resourceWrapper;
+
+ @JsonIgnore
+ private MavenBuildFileRefactoring refactoring;
+
+ private String dependencies;
+
+ public OpenRewriteMavenPlugin(org.openrewrite.maven.tree.Plugin openRewritePlugin,RewriteSourceFileHolder resource, MavenBuildFileRefactoring refactoring) {
+ this.groupId = openRewritePlugin.getGroupId();
+ this.artifactId = openRewritePlugin.getArtifactId();
+ this.version = openRewritePlugin.getVersion();
+ this.configuration = mapConfiguration(openRewritePlugin.getConfiguration());
+ this.executions = mapExecutions(openRewritePlugin.getExecutions());
+ this.dependencies = null;
+ this.resourceWrapper = resource;
+ this.refactoring = refactoring;
+ }
+
+ private List mapExecutions(
+ List openRewritePluginExecutions) {
+ if (openRewritePluginExecutions == null || openRewritePluginExecutions.isEmpty()) {
+ return new ArrayList<>();
+ }
+ return openRewritePluginExecutions.stream()
+ .map(orExecution -> new OpenRewriteMavenPluginExecution(orExecution.getId(), orExecution.getGoals(),
+ orExecution.getPhase(), null))
+ .collect(Collectors.toList());
+
+ }
+
+ private OpenRewriteMavenPluginConfiguration mapConfiguration(JsonNode openRewritePluginConfiguration) {
+ if (openRewritePluginConfiguration == null || openRewritePluginConfiguration.isEmpty()) {
+ return new OpenRewriteMavenPluginConfiguration(new LinkedHashMap<>());
+ }
+ return new OpenRewriteMavenPluginConfiguration(
+ MavenXmlMapper.readMapper().convertValue(openRewritePluginConfiguration, new TypeReference<>() {
+ }));
+ }
+
+ @AllArgsConstructor
+ @NoArgsConstructor
+ public class OpenRewriteMavenPluginConfiguration implements Configuration {
+
+ @JsonAnyGetter
+ private Map configuration;
+
+ @Override
+ public Optional getDeclaredStringValue(String property) {
+ return Optional.ofNullable((String) configuration.get(property));
+ }
+
+ @Override
+ public String getResolvedStringValue(String property) {
+ Optional value = getDeclaredStringValue(property);
+ String propertyValue = value
+ .orElseThrow((() -> new IllegalStateException("Found no value for property " + property)));
+ if (propertyValue.startsWith("${")) {
+ String propertyWithoutBraces = propertyValue.replace("${", "").replace("}", "");
+ return MavenBuildFileUtil
+ .findMavenResolution(OpenRewriteMavenPlugin.this.resourceWrapper.getSourceFile()).get().getPom()
+ .getProperties().get(propertyWithoutBraces);
+ }
+ else {
+ return propertyValue;
+ }
+ }
+
+ @Override
+ public void setDeclaredStringValue(String property, String value) {
+ configuration.put(property, value);
+ changeConfiguration();
+ }
+
+ @Override
+ @JsonIgnore
+ public Set getPropertyKeys() {
+ return configuration.keySet();
+ }
+
+ private void changeConfiguration() {
+ try {
+ String configurationXml = MavenXmlMapper.writeMapper().writerWithDefaultPrettyPrinter()
+ .writeValueAsString(configuration).replaceFirst("", "")
+ .replace("", "").replace("", "").trim();
+ OpenRewriteMavenPlugin.this.refactoring.execute(new ChangePluginConfiguration(
+ OpenRewriteMavenPlugin.this.groupId, OpenRewriteMavenPlugin.this.artifactId, configurationXml));
+ }
+ catch (JsonProcessingException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ }
+
+ @Builder
+ @Getter
+ @NoArgsConstructor
+ @AllArgsConstructor
+ @Setter
+ @JsonInclude(Include.NON_NULL)
+ @JacksonXmlRootElement(localName = "execution")
+ public static class OpenRewriteMavenPluginExecution implements Execution {
+
+ @Null
+ private String id;
+
+ @Singular("goal")
+ private List goals;
+
+ @Null
+ private String phase;
+
+ @Null
+ private String configuration;
+
+ }
+
+}
diff --git a/components/sbm-core/src/main/java/org/springframework/sbm/build/migration/actions/AddMavenPlugin.java b/components/sbm-core/src/main/java/org/springframework/sbm/build/migration/actions/AddMavenPlugin.java
index 293a3ec2b..15d1e7c35 100644
--- a/components/sbm-core/src/main/java/org/springframework/sbm/build/migration/actions/AddMavenPlugin.java
+++ b/components/sbm-core/src/main/java/org/springframework/sbm/build/migration/actions/AddMavenPlugin.java
@@ -15,10 +15,8 @@
*/
package org.springframework.sbm.build.migration.actions;
-import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
-import org.springframework.sbm.build.api.Plugin;
-import org.springframework.sbm.engine.recipe.AbstractAction;
+import org.springframework.sbm.build.impl.OpenRewriteMavenPlugin;
import org.springframework.sbm.engine.context.ProjectContext;
import lombok.Getter;
import lombok.Setter;
@@ -33,7 +31,7 @@ public class AddMavenPlugin extends MultiModuleAwareAction {
@Setter
@Valid
- private Plugin plugin;
+ private OpenRewriteMavenPlugin plugin;
public AddMavenPlugin() {
super(builder());
diff --git a/components/sbm-core/src/main/java/org/springframework/sbm/build/migration/actions/SetProperty.java b/components/sbm-core/src/main/java/org/springframework/sbm/build/migration/actions/SetProperty.java
index 351db127c..cf3fa2baf 100644
--- a/components/sbm-core/src/main/java/org/springframework/sbm/build/migration/actions/SetProperty.java
+++ b/components/sbm-core/src/main/java/org/springframework/sbm/build/migration/actions/SetProperty.java
@@ -15,11 +15,16 @@
*/
package org.springframework.sbm.build.migration.actions;
+import lombok.NoArgsConstructor;
import lombok.Setter;
+import lombok.experimental.SuperBuilder;
+
import org.springframework.sbm.engine.context.ProjectContext;
import org.springframework.sbm.engine.recipe.AbstractAction;
@Setter
+@SuperBuilder
+@NoArgsConstructor
public class SetProperty extends AbstractAction {
private String propertyName;
diff --git a/components/sbm-core/src/main/java/org/springframework/sbm/build/migration/conditions/MavenPluginDoesNotExist.java b/components/sbm-core/src/main/java/org/springframework/sbm/build/migration/conditions/MavenPluginDoesNotExist.java
index 237924d7c..c45c6a9a5 100644
--- a/components/sbm-core/src/main/java/org/springframework/sbm/build/migration/conditions/MavenPluginDoesNotExist.java
+++ b/components/sbm-core/src/main/java/org/springframework/sbm/build/migration/conditions/MavenPluginDoesNotExist.java
@@ -15,7 +15,7 @@
*/
package org.springframework.sbm.build.migration.conditions;
-import org.springframework.sbm.build.api.Plugin;
+import org.springframework.sbm.build.impl.OpenRewriteMavenPlugin;
import org.springframework.sbm.engine.recipe.Condition;
import org.springframework.sbm.engine.context.ProjectContext;
import lombok.Setter;
@@ -25,7 +25,7 @@
public class MavenPluginDoesNotExist implements Condition {
@Setter
@Valid
- private Plugin plugin;
+ private OpenRewriteMavenPlugin plugin;
@Override
public String getDescription() {
diff --git a/components/sbm-core/src/main/java/org/springframework/sbm/build/migration/recipe/AddMavenPlugin.java b/components/sbm-core/src/main/java/org/springframework/sbm/build/migration/recipe/AddMavenPlugin.java
index ca0a088de..6f6bdadb1 100644
--- a/components/sbm-core/src/main/java/org/springframework/sbm/build/migration/recipe/AddMavenPlugin.java
+++ b/components/sbm-core/src/main/java/org/springframework/sbm/build/migration/recipe/AddMavenPlugin.java
@@ -15,18 +15,21 @@
*/
package org.springframework.sbm.build.migration.recipe;
+import com.fasterxml.jackson.core.JsonProcessingException;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.openrewrite.ExecutionContext;
import org.openrewrite.Recipe;
import org.openrewrite.TreeVisitor;
import org.openrewrite.maven.MavenVisitor;
+import org.openrewrite.maven.internal.MavenXmlMapper;
import org.openrewrite.xml.AddToTagVisitor;
import org.openrewrite.xml.ChangeTagValueVisitor;
import org.openrewrite.xml.XPathMatcher;
import org.openrewrite.xml.tree.Content;
import org.openrewrite.xml.tree.Xml;
-import org.springframework.sbm.build.api.Plugin;
+import org.springframework.sbm.build.impl.OpenRewriteMavenPlugin;
+import org.springframework.sbm.build.impl.OpenRewriteMavenPlugin.OpenRewriteMavenPluginExecution;
import java.util.List;
import java.util.Optional;
@@ -38,7 +41,7 @@ public class AddMavenPlugin extends Recipe {
private static final XPathMatcher BUILD_MATCHER = new XPathMatcher("/project/build");
- private final Plugin plugin;
+ private final OpenRewriteMavenPlugin plugin;
@Override
protected TreeVisitor, ExecutionContext> getVisitor() {
@@ -108,7 +111,7 @@ private String createPluginTagString() {
sb.append("\n");
sb.append(renderVersion());
sb.append(renderExecutions());
- sb.append(plugin.getConfiguration() != null ? plugin.getConfiguration().trim() + "\n" : "");
+ sb.append(renderConfiguration());
sb.append(plugin.getDependencies() != null ? plugin.getDependencies().trim() + "\n" : "");
sb.append("\n");
return sb.toString();
@@ -122,6 +125,20 @@ private String renderVersion() {
return plugin.getVersion() != null ? "" + plugin.getVersion() + "\n" : "";
}
+ private String renderConfiguration(){
+ if (plugin.getConfiguration() != null) {
+ try {
+ String configurationXml = MavenXmlMapper.writeMapper().writerWithDefaultPrettyPrinter()
+ .writeValueAsString(plugin.getConfiguration());
+ return configurationXml;
+ }
+ catch (JsonProcessingException e) {
+ throw new RuntimeException(e);
+ }
+ }
+ return "";
+ }
+
private String renderExecutions() {
if (plugin.getExecutions() == null || plugin.getExecutions().isEmpty())
return "";
@@ -130,27 +147,27 @@ private String renderExecutions() {
return "\n" + executions + "\n\n";
}
- private String renderExecution(Plugin.Execution execution) {
+ private String renderExecution(OpenRewriteMavenPluginExecution execution) {
return "\n" + renderId(execution) + renderGoals(execution) + renderPhase(execution)
- + renderConfiguration(execution) + "";
+ + renderExecutionConfiguration(execution) + "