diff --git a/src/main/java/org/openrewrite/java/migrate/maven/UpdateMavenProjectPropertyJavaVersion.java b/src/main/java/org/openrewrite/java/migrate/maven/UpdateMavenProjectPropertyJavaVersion.java index 3443fd622c..c70e60175e 100644 --- a/src/main/java/org/openrewrite/java/migrate/maven/UpdateMavenProjectPropertyJavaVersion.java +++ b/src/main/java/org/openrewrite/java/migrate/maven/UpdateMavenProjectPropertyJavaVersion.java @@ -29,6 +29,7 @@ import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.stream.Collectors; @Value @@ -88,10 +89,7 @@ public Xml.Document visitDocument(Xml.Document document, ExecutionContext ctx) { Xml.Document d = super.visitDocument(document, ctx); // Return early if the parent appears to be within the current repository, as properties defined there will be updated - if (d.getRoot().getChild("parent") - .flatMap(parent -> parent.getChild("relativePath")) - .flatMap(Xml.Tag::getValue) - .isPresent()) { + if (isLocalParent(d)) { return d; } @@ -142,6 +140,20 @@ public Xml.Tag visitTag(Xml.Tag tag, ExecutionContext ctx) { } return t; } + + private boolean isLocalParent(Xml.Document d) { + Optional relativePath = d.getRoot().getChild("parent") + .flatMap(parent -> parent.getChild("relativePath")); + if (relativePath.flatMap(Xml.Tag::getValue).isPresent()) { + // specified explicitly: `../../pom.xml>` + return true; + } else { + // no relative path, maven default is used, potentially `../pom.xml` + // but parent exists, so not root `pom.xml` + return !relativePath.isPresent() && getResolutionResult().getParent() != null; + } + + } }; } } diff --git a/src/test/java/org/openrewrite/java/migrate/maven/UpdateMavenProjectPropertyJavaVersionTest.java b/src/test/java/org/openrewrite/java/migrate/maven/UpdateMavenProjectPropertyJavaVersionTest.java index 9262e9e05a..84eecb4624 100644 --- a/src/test/java/org/openrewrite/java/migrate/maven/UpdateMavenProjectPropertyJavaVersionTest.java +++ b/src/test/java/org/openrewrite/java/migrate/maven/UpdateMavenProjectPropertyJavaVersionTest.java @@ -194,6 +194,68 @@ void overrideRemoteParent() { ); } + @Test + void doNotOverrideLocalParent() { + rewriteRun( + //language=xml + pomXml( + """ + + com.example + example-parent + 1.0.0 + 4.0 + + 11 + 11 + 11 + 11 + 11 + 11 + 11 + 11 + + + """, + """ + + com.example + example-parent + 1.0.0 + 4.0 + + 17 + 17 + 17 + 17 + 17 + 17 + 17 + 17 + + + """), + mavenProject("example-child", + //language=xml + pomXml( + """ + + + com.example + example-parent + 1.0.0 + + com.example + example-child + 1.0.0 + 4.0 + + """ + ) + ) + ); + } + @Test void doNothingForExplicitPluginConfiguration() { // Use UseMavenCompilerPluginReleaseConfiguration for this case