Skip to content

Commit

Permalink
Add version tag for managed dependency with property (openrewrite#4692)
Browse files Browse the repository at this point in the history
* 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 <[email protected]>
Co-authored-by: Tim te Beek <[email protected]>
  • Loading branch information
3 people authored Nov 29, 2024
1 parent 2419403 commit d40f8e0
Show file tree
Hide file tree
Showing 2 changed files with 122 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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<Xml.Tag> version = tag.getChild("version");
Expand Down Expand Up @@ -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());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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(
"""
<project>
<groupId>com.mycompany</groupId>
<artifactId>my-child</artifactId>
<version>1</version>
<dependencies>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>3.3.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
""",
"""
<project>
<groupId>com.mycompany</groupId>
<artifactId>my-child</artifactId>
<version>1</version>
<dependencies>
<dependency>
<groupId>org.flywaydb</groupId>
<artifactId>flyway-core</artifactId>
<version>10.15.0</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>3.3.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
</project>
"""
)
);
}


@Test
void upgradeVersionDefinedViaExplicitPropertyInDependencyManagement() {
rewriteRun(
spec -> spec.recipe(new UpgradeDependencyVersion("org.projectlombok", "lombok", "1.18.30", "", true, null)),
pomXml(
"""
<project>
<groupId>com.mycompany</groupId>
<artifactId>my-child</artifactId>
<version>1</version>
<properties>
<lombok.version>1.18.22</lombok.version>
</properties>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
""",
"""
<project>
<groupId>com.mycompany</groupId>
<artifactId>my-child</artifactId>
<version>1</version>
<properties>
<lombok.version>1.18.30</lombok.version>
</properties>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
"""
)
);
}

@Issue("https://github.com/openrewrite/rewrite/issues/4193")
@Test
void upgradeVersionDefinedViaImplicitPropertyInRemoteParent() {
Expand Down

0 comments on commit d40f8e0

Please sign in to comment.