diff --git a/rewrite-maven/src/main/java/org/openrewrite/maven/MavenVisitor.java b/rewrite-maven/src/main/java/org/openrewrite/maven/MavenVisitor.java
index 0bca82c31b5..3a06aa994ca 100644
--- a/rewrite-maven/src/main/java/org/openrewrite/maven/MavenVisitor.java
+++ b/rewrite-maven/src/main/java/org/openrewrite/maven/MavenVisitor.java
@@ -35,8 +35,11 @@
public class MavenVisitor
extends XmlVisitor
{
static final XPathMatcher DEPENDENCY_MATCHER = new XPathMatcher("/project/dependencies/dependency");
+ static final XPathMatcher PROFILE_DEPENDENCY_MATCHER = new XPathMatcher("/project/profiles/profile/dependencies/dependency");
static final XPathMatcher PLUGIN_DEPENDENCY_MATCHER = new XPathMatcher("//plugins/plugin/dependencies/dependency");
+ static final XPathMatcher PROFILE_PLUGIN_DEPENDENCY_MATCHER = new XPathMatcher("/project/profiles/profile/build/plugins/plugin/dependencies/dependency");
static final XPathMatcher MANAGED_DEPENDENCY_MATCHER = new XPathMatcher("/project/dependencyManagement/dependencies/dependency");
+ static final XPathMatcher PROFILE_MANAGED_DEPENDENCY_MATCHER = new XPathMatcher("/project/profiles/profile/dependencyManagement/dependencies/dependency");
static final XPathMatcher PROPERTY_MATCHER = new XPathMatcher("/project/properties/*");
static final XPathMatcher PLUGIN_MATCHER = new XPathMatcher("//plugins/plugin");
static final XPathMatcher PARENT_MATCHER = new XPathMatcher("/project/parent");
@@ -61,9 +64,9 @@ public boolean isAcceptable(SourceFile sourceFile, P p) {
protected MavenResolutionResult getResolutionResult() {
Iterator itr = getCursor()
.getPath(Xml.Document.class::isInstance);
- if(itr.hasNext()) {
+ if (itr.hasNext()) {
Xml.Document newDocument = (Xml.Document) itr.next();
- if(document != null && document != newDocument) {
+ if (document != null && document != newDocument) {
throw new IllegalStateException(
"The same MavenVisitor instance has been used on two different XML documents. " +
"This violates the Recipe contract that they will return a unique visitor instance every time getVisitor() is called.");
@@ -96,6 +99,11 @@ public boolean isDependencyTag() {
*/
public boolean isDependencyTag(String groupId, String artifactId) {
if (!isDependencyTag()) {
+ if (isTag("dependency") && PROFILE_DEPENDENCY_MATCHER.matches(getCursor())) {
+ Xml.Tag tag = getCursor().getValue();
+ return matchesGlob(tag.getChildValue("groupId").orElse(null), groupId) &&
+ matchesGlob(tag.getChildValue("artifactId").orElse(null), artifactId);
+ }
return false;
}
Xml.Tag tag = getCursor().getValue();
@@ -132,7 +140,9 @@ public boolean isDependencyTag(String groupId, String artifactId) {
}
public boolean isPluginDependencyTag(String groupId, String artifactId) {
- if (!PLUGIN_DEPENDENCY_MATCHER.matches(getCursor())) {
+ if (!isTag("dependency") ||
+ !PLUGIN_DEPENDENCY_MATCHER.matches(getCursor()) &&
+ !PROFILE_PLUGIN_DEPENDENCY_MATCHER.matches(getCursor())) {
return false;
}
Xml.Tag tag = getCursor().getValue();
@@ -153,6 +163,11 @@ public boolean isManagedDependencyTag() {
*/
public boolean isManagedDependencyTag(String groupId, String artifactId) {
if (!isManagedDependencyTag()) {
+ if (isTag("dependency") && PROFILE_MANAGED_DEPENDENCY_MATCHER.matches(getCursor())) {
+ Xml.Tag tag = getCursor().getValue();
+ return matchesGlob(tag.getChildValue("groupId").orElse(null), groupId) &&
+ matchesGlob(tag.getChildValue("artifactId").orElse(null), artifactId);
+ }
return false;
}
Xml.Tag tag = getCursor().getValue();
diff --git a/rewrite-maven/src/test/java/org/openrewrite/maven/ChangeDependencyGroupIdAndArtifactIdTest.java b/rewrite-maven/src/test/java/org/openrewrite/maven/ChangeDependencyGroupIdAndArtifactIdTest.java
index ed923a7ced6..c161d490a51 100644
--- a/rewrite-maven/src/test/java/org/openrewrite/maven/ChangeDependencyGroupIdAndArtifactIdTest.java
+++ b/rewrite-maven/src/test/java/org/openrewrite/maven/ChangeDependencyGroupIdAndArtifactIdTest.java
@@ -147,6 +147,64 @@ void changeManagedDependencyGroupIdAndArtifactId() {
);
}
+ @Test
+ void changeProfileManagedDependencyGroupIdAndArtifactId() {
+ rewriteRun(
+ spec -> spec.recipe(new ChangeDependencyGroupIdAndArtifactId(
+ "javax.activation",
+ "javax.activation-api",
+ "jakarta.activation",
+ "jakarta.activation-api",
+ "2.1.0",
+ null
+ )),
+ pomXml(
+ """
+
+ 4.0.0
+ com.mycompany.app
+ my-app
+ 1
+
+
+
+
+
+ javax.activation
+ javax.activation-api
+ 1.2.0
+
+
+
+
+
+
+ """,
+ """
+
+ 4.0.0
+ com.mycompany.app
+ my-app
+ 1
+
+
+
+
+
+ jakarta.activation
+ jakarta.activation-api
+ 2.1.0
+
+
+
+
+
+
+ """
+ )
+ );
+ }
+
@Test
@Issue("https://github.com/openrewrite/rewrite-java-dependencies/issues/55")
void requireNewGroupIdOrNewArtifactId() {
@@ -1135,4 +1193,58 @@ void changeGroupIdOnWildcardArtifacts() {
)
);
}
+
+ @Test
+ void changeProfileDependencyGroupIdAndArtifactId() {
+ rewriteRun(
+ spec -> spec.recipe(new ChangeDependencyGroupIdAndArtifactId(
+ "javax.activation",
+ "javax.activation-api",
+ "jakarta.activation",
+ "jakarta.activation-api",
+ "2.1.0",
+ null
+ )),
+ pomXml(
+ """
+
+ 4.0.0
+ com.mycompany.app
+ my-app
+ 1
+
+
+
+
+ javax.activation
+ javax.activation-api
+ 1.2.0
+
+
+
+
+
+ """,
+ """
+
+ 4.0.0
+ com.mycompany.app
+ my-app
+ 1
+
+
+
+
+ jakarta.activation
+ jakarta.activation-api
+ 2.1.0
+
+
+
+
+
+ """
+ )
+ );
+ }
}
diff --git a/rewrite-maven/src/test/java/org/openrewrite/maven/ChangeManagedDependencyGroupIdAndArtifactIdTest.java b/rewrite-maven/src/test/java/org/openrewrite/maven/ChangeManagedDependencyGroupIdAndArtifactIdTest.java
index 5006e8412c0..b1458dda26d 100644
--- a/rewrite-maven/src/test/java/org/openrewrite/maven/ChangeManagedDependencyGroupIdAndArtifactIdTest.java
+++ b/rewrite-maven/src/test/java/org/openrewrite/maven/ChangeManagedDependencyGroupIdAndArtifactIdTest.java
@@ -128,7 +128,7 @@ void changeManagedDependencyWithDynamicVersion() {
}
@Test
- void latestPatch() {
+ void latestPatchMangedDependency() {
rewriteRun(
spec -> spec.recipe(new ChangeManagedDependencyGroupIdAndArtifactId(
"javax.activation",
@@ -176,4 +176,61 @@ void latestPatch() {
)
);
}
+
+ @Test
+ void changeProfileManagedDependencyGroupIdAndArtifactId() {
+ rewriteRun(
+ spec -> spec.recipe(new ChangeManagedDependencyGroupIdAndArtifactId(
+ "javax.activation",
+ "javax.activation-api",
+ "jakarta.activation",
+ "jakarta.activation-api",
+ "2.1.0"
+ )),
+ pomXml(
+ """
+
+ 4.0.0
+ com.mycompany.app
+ my-app
+ 1
+
+
+
+
+
+ javax.activation
+ javax.activation-api
+ 1.2.0
+
+
+
+
+
+
+ """,
+ """
+
+ 4.0.0
+ com.mycompany.app
+ my-app
+ 1
+
+
+
+
+
+ jakarta.activation
+ jakarta.activation-api
+ 2.1.0
+
+
+
+
+
+
+ """
+ )
+ );
+ }
}