From d10adc7e4c44c9a96b8f619250d62ad8d85d7eb2 Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Sun, 1 Oct 2023 00:13:46 +0200 Subject: [PATCH 1/2] Add explicit Maven plugin groupId for clarity Fixes https://github.com/openrewrite/rewrite/issues/3529 --- .../maven/cleanup/ExplicitGroupId.java | 57 ++++++++ .../main/resources/META-INF/rewrite/maven.yml | 1 + .../maven/cleanup/ExplicitGroupIdTest.java | 123 ++++++++++++++++++ .../ManagedDependencyRequiresVersionTest.java | 1 - 4 files changed, 181 insertions(+), 1 deletion(-) create mode 100755 rewrite-maven/src/main/java/org/openrewrite/maven/cleanup/ExplicitGroupId.java create mode 100644 rewrite-maven/src/test/java/org/openrewrite/maven/cleanup/ExplicitGroupIdTest.java diff --git a/rewrite-maven/src/main/java/org/openrewrite/maven/cleanup/ExplicitGroupId.java b/rewrite-maven/src/main/java/org/openrewrite/maven/cleanup/ExplicitGroupId.java new file mode 100755 index 00000000000..3ba2e0edf24 --- /dev/null +++ b/rewrite-maven/src/main/java/org/openrewrite/maven/cleanup/ExplicitGroupId.java @@ -0,0 +1,57 @@ +/* + * Copyright 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.openrewrite.maven.cleanup; + +import lombok.EqualsAndHashCode; +import lombok.Value; +import org.openrewrite.ExecutionContext; +import org.openrewrite.Recipe; +import org.openrewrite.TreeVisitor; +import org.openrewrite.maven.MavenTagInsertionComparator; +import org.openrewrite.maven.MavenVisitor; +import org.openrewrite.xml.AddToTagVisitor; +import org.openrewrite.xml.tree.Xml; + +@Value +@EqualsAndHashCode(callSuper = true) +public class ExplicitGroupId extends Recipe { + @Override + public String getDisplayName() { + return "Add explicit `groupId` to Maven plugins"; + } + + @Override + public String getDescription() { + return "Add the default `org.apache.maven.plugins` to plugins for clarity."; + } + + @Override + public TreeVisitor getVisitor() { + return new MavenVisitor() { + @Override + public Xml visitTag(Xml.Tag tag, ExecutionContext ctx) { + Xml.Tag t = (Xml.Tag) super.visitTag(tag, ctx); + if (isPluginTag() && !t.getChild("groupId").isPresent()) { + Xml.Tag groupIdTag = Xml.Tag.build("org.apache.maven.plugins"); + t = (Xml.Tag) new AddToTagVisitor<>(t, groupIdTag, new MavenTagInsertionComparator(t.getChildren())) + .visitNonNull(t, ctx, getCursor().getParentOrThrow()); + maybeUpdateModel(); + } + return t; + } + }; + } +} diff --git a/rewrite-maven/src/main/resources/META-INF/rewrite/maven.yml b/rewrite-maven/src/main/resources/META-INF/rewrite/maven.yml index 1a8a106553b..5d860edd594 100644 --- a/rewrite-maven/src/main/resources/META-INF/rewrite/maven.yml +++ b/rewrite-maven/src/main/resources/META-INF/rewrite/maven.yml @@ -19,6 +19,7 @@ name: org.openrewrite.maven.BestPractices displayName: Apache Maven best practices description: Applies best practices to Maven POMs. recipeList: + - org.openrewrite.maven.cleanup.ExplicitGroupId - org.openrewrite.maven.cleanup.PrefixlessExpressions --- diff --git a/rewrite-maven/src/test/java/org/openrewrite/maven/cleanup/ExplicitGroupIdTest.java b/rewrite-maven/src/test/java/org/openrewrite/maven/cleanup/ExplicitGroupIdTest.java new file mode 100644 index 00000000000..4910ae12767 --- /dev/null +++ b/rewrite-maven/src/test/java/org/openrewrite/maven/cleanup/ExplicitGroupIdTest.java @@ -0,0 +1,123 @@ +/* + * Copyright 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.openrewrite.maven.cleanup; + +import org.junit.jupiter.api.Test; +import org.openrewrite.DocumentExample; +import org.openrewrite.Issue; +import org.openrewrite.test.RecipeSpec; +import org.openrewrite.test.RewriteTest; + +import static org.openrewrite.maven.Assertions.pomXml; + +class ExplicitGroupIdTest implements RewriteTest { + + private static final String BEFORE = """ + + com.mycompany.app + my-app + 1 + + + + maven-compiler-plugin + 3.8.0 + + 1.8 + 1.8 + + + + + + """; + private static final String AFTER = """ + + com.mycompany.app + my-app + 1 + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.0 + + 1.8 + 1.8 + + + + + + """; + + @Override + public void defaults(RecipeSpec spec) { + spec.recipe(new ExplicitGroupId()); + } + + @Test + @DocumentExample + @Issue("https://github.com/openrewrite/rewrite/issues/3529") + void addGroupId() { + rewriteRun(pomXml(BEFORE, AFTER)); + } + + @Test + void noopIfPresent() { + rewriteRun(pomXml(AFTER)); + } + + @Test + void reportingPlugin() { + rewriteRun( + pomXml( + """ + + com.mycompany.app + my-app + 1 + + + + maven-project-info-reports-plugin + 2.6 + + + + + """, + """ + + com.mycompany.app + my-app + 1 + + + + org.apache.maven.plugins + maven-project-info-reports-plugin + 2.6 + + + + + """ + ) + ); + } +} \ No newline at end of file diff --git a/rewrite-maven/src/test/java/org/openrewrite/maven/cleanup/ManagedDependencyRequiresVersionTest.java b/rewrite-maven/src/test/java/org/openrewrite/maven/cleanup/ManagedDependencyRequiresVersionTest.java index 6be2d846e00..ec129a9c9c5 100644 --- a/rewrite-maven/src/test/java/org/openrewrite/maven/cleanup/ManagedDependencyRequiresVersionTest.java +++ b/rewrite-maven/src/test/java/org/openrewrite/maven/cleanup/ManagedDependencyRequiresVersionTest.java @@ -22,7 +22,6 @@ import static org.openrewrite.maven.Assertions.pomXml; class ManagedDependencyRequiresVersionTest implements RewriteTest { - @Issue("https://github.com/openrewrite/rewrite/issues/1084") @Test void dependencyManagementDependencyRequiresVersion() { From 1f4aafedd2a59f2c0363cadbe51dd5e4979aa9cd Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Sun, 1 Oct 2023 00:28:26 +0200 Subject: [PATCH 2/2] Rename to ExplicitPluginGroupId --- ...plicitGroupId.java => ExplicitPluginGroupId.java} | 2 +- .../src/main/resources/META-INF/rewrite/maven.yml | 2 +- ...oupIdTest.java => ExplicitPluginGroupIdTest.java} | 12 ++++++------ 3 files changed, 8 insertions(+), 8 deletions(-) rename rewrite-maven/src/main/java/org/openrewrite/maven/cleanup/{ExplicitGroupId.java => ExplicitPluginGroupId.java} (97%) rename rewrite-maven/src/test/java/org/openrewrite/maven/cleanup/{ExplicitGroupIdTest.java => ExplicitPluginGroupIdTest.java} (97%) diff --git a/rewrite-maven/src/main/java/org/openrewrite/maven/cleanup/ExplicitGroupId.java b/rewrite-maven/src/main/java/org/openrewrite/maven/cleanup/ExplicitPluginGroupId.java similarity index 97% rename from rewrite-maven/src/main/java/org/openrewrite/maven/cleanup/ExplicitGroupId.java rename to rewrite-maven/src/main/java/org/openrewrite/maven/cleanup/ExplicitPluginGroupId.java index 3ba2e0edf24..e9bb432c38f 100755 --- a/rewrite-maven/src/main/java/org/openrewrite/maven/cleanup/ExplicitGroupId.java +++ b/rewrite-maven/src/main/java/org/openrewrite/maven/cleanup/ExplicitPluginGroupId.java @@ -27,7 +27,7 @@ @Value @EqualsAndHashCode(callSuper = true) -public class ExplicitGroupId extends Recipe { +public class ExplicitPluginGroupId extends Recipe { @Override public String getDisplayName() { return "Add explicit `groupId` to Maven plugins"; diff --git a/rewrite-maven/src/main/resources/META-INF/rewrite/maven.yml b/rewrite-maven/src/main/resources/META-INF/rewrite/maven.yml index 5d860edd594..351033dad40 100644 --- a/rewrite-maven/src/main/resources/META-INF/rewrite/maven.yml +++ b/rewrite-maven/src/main/resources/META-INF/rewrite/maven.yml @@ -19,7 +19,7 @@ name: org.openrewrite.maven.BestPractices displayName: Apache Maven best practices description: Applies best practices to Maven POMs. recipeList: - - org.openrewrite.maven.cleanup.ExplicitGroupId + - org.openrewrite.maven.cleanup.ExplicitPluginGroupId - org.openrewrite.maven.cleanup.PrefixlessExpressions --- diff --git a/rewrite-maven/src/test/java/org/openrewrite/maven/cleanup/ExplicitGroupIdTest.java b/rewrite-maven/src/test/java/org/openrewrite/maven/cleanup/ExplicitPluginGroupIdTest.java similarity index 97% rename from rewrite-maven/src/test/java/org/openrewrite/maven/cleanup/ExplicitGroupIdTest.java rename to rewrite-maven/src/test/java/org/openrewrite/maven/cleanup/ExplicitPluginGroupIdTest.java index 4910ae12767..a62c4b90d4d 100644 --- a/rewrite-maven/src/test/java/org/openrewrite/maven/cleanup/ExplicitGroupIdTest.java +++ b/rewrite-maven/src/test/java/org/openrewrite/maven/cleanup/ExplicitPluginGroupIdTest.java @@ -23,7 +23,11 @@ import static org.openrewrite.maven.Assertions.pomXml; -class ExplicitGroupIdTest implements RewriteTest { +class ExplicitPluginGroupIdTest implements RewriteTest { + @Override + public void defaults(RecipeSpec spec) { + spec.recipe(new ExplicitPluginGroupId()); + } private static final String BEFORE = """ @@ -44,6 +48,7 @@ class ExplicitGroupIdTest implements RewriteTest { """; + private static final String AFTER = """ com.mycompany.app @@ -65,11 +70,6 @@ class ExplicitGroupIdTest implements RewriteTest { """; - @Override - public void defaults(RecipeSpec spec) { - spec.recipe(new ExplicitGroupId()); - } - @Test @DocumentExample @Issue("https://github.com/openrewrite/rewrite/issues/3529")