From d40f8e095a0c9ff5724291a7310692157657a748 Mon Sep 17 00:00:00 2001 From: Rakshith Mohan <76608847+mrakshith21@users.noreply.github.com> Date: Fri, 29 Nov 2024 15:59:18 +0530 Subject: [PATCH] Add version tag for managed dependency with property (#4692) * Add version tag for managed dependency with property * Added unit test to upgrade version defined via implicit property in dependency management bom * format code * update property when requested bom is null and add unit test * fix mistakes * Apply formatter --------- Co-authored-by: rmohan11 Co-authored-by: Tim te Beek --- .../maven/UpgradeDependencyVersion.java | 6 +- .../maven/UpgradeDependencyVersionTest.java | 118 ++++++++++++++++++ 2 files changed, 122 insertions(+), 2 deletions(-) diff --git a/rewrite-maven/src/main/java/org/openrewrite/maven/UpgradeDependencyVersion.java b/rewrite-maven/src/main/java/org/openrewrite/maven/UpgradeDependencyVersion.java index 94e9523f0d5..05fdbdf704e 100644 --- a/rewrite-maven/src/main/java/org/openrewrite/maven/UpgradeDependencyVersion.java +++ b/rewrite-maven/src/main/java/org/openrewrite/maven/UpgradeDependencyVersion.java @@ -150,7 +150,7 @@ public Xml.Tag visitTag(final Xml.Tag tag, final ExecutionContext ctx) { // if the resolved dependency exists AND it does not represent an artifact that was parsed // as a source file, attempt to find a new version. try { - String newerVersion = MavenDependency.findNewerVersion(d.getGroupId(), d.getArtifactId(), d.getVersion(), getResolutionResult(), metadataFailures, + String newerVersion = MavenDependency.findNewerVersion(d.getGroupId(), d.getArtifactId(), d.getVersion(), getResolutionResult(), metadataFailures, versionComparator, ctx); if (newerVersion != null) { Optional version = tag.getChild("version"); @@ -298,10 +298,12 @@ private Xml.Tag upgradeDependency(ExecutionContext ctx, Xml.Tag t) throws MavenD } else if (Boolean.TRUE.equals(overrideManagedVersion)) { ResolvedManagedDependency dm = findManagedDependency(t); // if a managed dependency is expressed as a property, change the property value + // do this only when a requested bom is absent, otherwise changing property has no effect if (dm != null && dm.getRequested().getVersion() != null && dm.getRequested().getVersion().startsWith("${") && - !implicitlyDefinedVersionProperties.contains(dm.getRequested().getVersion())) { + !implicitlyDefinedVersionProperties.contains(dm.getRequested().getVersion()) && + dm.getRequestedBom() == null) { doAfterVisit(new ChangePropertyValue(dm.getRequested().getVersion().substring(2, dm.getRequested().getVersion().length() - 1), newerVersion, overrideManagedVersion, false).getVisitor()); diff --git a/rewrite-maven/src/test/java/org/openrewrite/maven/UpgradeDependencyVersionTest.java b/rewrite-maven/src/test/java/org/openrewrite/maven/UpgradeDependencyVersionTest.java index 63b2e70bc43..1e1f9794e8d 100644 --- a/rewrite-maven/src/test/java/org/openrewrite/maven/UpgradeDependencyVersionTest.java +++ b/rewrite-maven/src/test/java/org/openrewrite/maven/UpgradeDependencyVersionTest.java @@ -854,6 +854,124 @@ void upgradeVersionDefinedViaPropertyInLocalParent() { ); } + @Test + void upgradeVersionDefinedViaImplicitPropertyInDependencyManagementBom() { + rewriteRun( + spec -> spec.recipe(new UpgradeDependencyVersion("org.flywaydb", "flyway-core", "10.15.0", "", true, null)), + pomXml( + """ + + com.mycompany + my-child + 1 + + + org.flywaydb + flyway-core + + + + + + org.springframework.boot + spring-boot-dependencies + 3.3.0 + pom + import + + + + + """, + """ + + com.mycompany + my-child + 1 + + + org.flywaydb + flyway-core + 10.15.0 + + + + + + org.springframework.boot + spring-boot-dependencies + 3.3.0 + pom + import + + + + + """ + ) + ); + } + + + @Test + void upgradeVersionDefinedViaExplicitPropertyInDependencyManagement() { + rewriteRun( + spec -> spec.recipe(new UpgradeDependencyVersion("org.projectlombok", "lombok", "1.18.30", "", true, null)), + pomXml( + """ + + com.mycompany + my-child + 1 + + 1.18.22 + + + + org.projectlombok + lombok + + + + + + org.projectlombok + lombok + ${lombok.version} + + + + + """, + """ + + com.mycompany + my-child + 1 + + 1.18.30 + + + + org.projectlombok + lombok + + + + + + org.projectlombok + lombok + ${lombok.version} + + + + + """ + ) + ); + } + @Issue("https://github.com/openrewrite/rewrite/issues/4193") @Test void upgradeVersionDefinedViaImplicitPropertyInRemoteParent() {