Skip to content

Commit 444d0a0

Browse files
BoykoAlextimtebeek
andauthored
Update version in the Gradle model (#6428)
* Update version in the Gradle model * Slight polish --------- Co-authored-by: Tim te Beek <[email protected]>
1 parent 166f09d commit 444d0a0

File tree

2 files changed

+74
-2
lines changed

2 files changed

+74
-2
lines changed

rewrite-gradle/src/main/java/org/openrewrite/gradle/ChangeDependency.java

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ public boolean isAcceptable(SourceFile sourceFile, ExecutionContext ctx) {
192192

193193
sourceFile = (JavaSourceFile) super.visit(sourceFile, ctx);
194194
if (sourceFile != null && sourceFile != tree) {
195-
sourceFile = sourceFile.withMarkers(sourceFile.getMarkers().setByType(updateGradleModel(gradleProject)));
195+
sourceFile = sourceFile.withMarkers(sourceFile.getMarkers().setByType(updateGradleModel(gradleProject, ctx)));
196196
if (changeManagedDependency == null || changeManagedDependency) {
197197
doAfterVisit(new ChangeManagedDependency(oldGroupId, oldArtifactId, newGroupId, newArtifactId, newVersion, versionPattern).getVisitor());
198198
}
@@ -626,7 +626,7 @@ private J.MethodInvocation updateDependency(J.MethodInvocation m, ExecutionConte
626626
return m;
627627
}
628628

629-
private GradleProject updateGradleModel(GradleProject gp) {
629+
private GradleProject updateGradleModel(GradleProject gp, ExecutionContext ctx) {
630630
Map<String, GradleDependencyConfiguration> nameToConfiguration = gp.getNameToConfiguration();
631631
Map<String, GradleDependencyConfiguration> newNameToConfiguration = new HashMap<>(nameToConfiguration.size());
632632
boolean anyChanged = false;
@@ -642,6 +642,17 @@ private GradleProject updateGradleModel(GradleProject gp) {
642642
if (newArtifactId != null) {
643643
gav = gav.withArtifactId(newArtifactId);
644644
}
645+
if (!StringUtils.isBlank(newVersion) && (!StringUtils.isBlank(gav.getVersion()) || Boolean.TRUE.equals(overrideManagedVersion))) {
646+
try {
647+
String resolvedVersion = new DependencyVersionSelector(metadataFailures, gradleProject, null)
648+
.select(new GroupArtifact(gav.getGroupId(), gav.getArtifactId()), gdc.getName(), newVersion, versionPattern, ctx);
649+
if (resolvedVersion != null && !resolvedVersion.equals(gav.getVersion())) {
650+
gav = gav.withVersion(resolvedVersion);
651+
}
652+
} catch (MavenDownloadingException e) {
653+
// Failure already in `metadataFailures`
654+
}
655+
}
645656
if (gav != r.getGav()) {
646657
r = r.withGav(gav);
647658
}
@@ -661,6 +672,17 @@ private GradleProject updateGradleModel(GradleProject gp) {
661672
if (newArtifactId != null) {
662673
gav = gav.withArtifactId(newArtifactId);
663674
}
675+
if (!StringUtils.isBlank(newVersion) && (!StringUtils.isBlank(gav.getVersion()) || Boolean.TRUE.equals(overrideManagedVersion))) {
676+
try {
677+
String resolvedVersion = new DependencyVersionSelector(metadataFailures, gradleProject, null)
678+
.select(new GroupArtifact(gav.getGroupId(), gav.getArtifactId()), gdc.getName(), newVersion, versionPattern, ctx);
679+
if (resolvedVersion != null && !resolvedVersion.equals(gav.getVersion())) {
680+
gav = gav.withVersion(resolvedVersion);
681+
}
682+
} catch (MavenDownloadingException e) {
683+
// Failure already in `metadataFailures`
684+
}
685+
}
664686
if (gav != r.getGav()) {
665687
r = r.withGav(gav);
666688
}

rewrite-gradle/src/test/java/org/openrewrite/gradle/ChangeDependencyTest.java

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import org.openrewrite.test.RecipeSpec;
2121
import org.openrewrite.test.RewriteTest;
2222

23+
import static org.assertj.core.api.Assertions.assertThat;
2324
import static org.openrewrite.gradle.Assertions.buildGradle;
2425
import static org.openrewrite.gradle.Assertions.buildGradleKts;
2526
import static org.openrewrite.gradle.toolingapi.Assertions.withToolingApi;
@@ -799,4 +800,53 @@ void makeChangesInKotlinDependencyManagementImports() {
799800
)
800801
);
801802
}
803+
804+
@Test
805+
void noDuplicateJacksonDatabindDependenciesInGradle() {
806+
rewriteRun(
807+
spec -> spec.beforeRecipe(withToolingApi())
808+
.recipes(
809+
new ChangeDependency(
810+
"com.fasterxml.jackson.core",
811+
"jackson-databind",
812+
"tools.jackson.core",
813+
null,
814+
"3.0.x",
815+
null,
816+
null,
817+
null
818+
),
819+
new ChangeDependency(
820+
"com.fasterxml.jackson.datatype",
821+
"jackson-datatype-jsr310",
822+
"tools.jackson.core",
823+
"jackson-databind",
824+
"3.0.x",
825+
null,
826+
null,
827+
null
828+
)
829+
),
830+
buildGradle(
831+
//language=gradle
832+
"""
833+
plugins {
834+
id("java-library")
835+
}
836+
repositories {
837+
mavenCentral()
838+
}
839+
dependencies {
840+
implementation("com.fasterxml.jackson.core:jackson-databind:2.19.0")
841+
implementation("com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.19.0")
842+
}
843+
""",
844+
spec -> spec.after(buildGradle ->
845+
assertThat(buildGradle)
846+
.containsOnlyOnce("tools.jackson.core:jackson-databind:3")
847+
.doesNotContain("datatype")
848+
.actual())
849+
)
850+
);
851+
}
802852
}

0 commit comments

Comments
 (0)