From 170c6caa2eaff0c8cd2be75a724c4695f5fce5a7 Mon Sep 17 00:00:00 2001 From: Jente Sondervorst Date: Thu, 4 Jul 2024 22:16:45 +0200 Subject: [PATCH 1/5] Resolved stackoverflow exception for circular dependencies. Not able to test due to no known transitive circular dependencies in OSS packages. Fixes #4299 --- .../openrewrite/gradle/UpgradeDependencyVersion.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/rewrite-gradle/src/main/java/org/openrewrite/gradle/UpgradeDependencyVersion.java b/rewrite-gradle/src/main/java/org/openrewrite/gradle/UpgradeDependencyVersion.java index 4403cb9ad0a..fe17de40254 100644 --- a/rewrite-gradle/src/main/java/org/openrewrite/gradle/UpgradeDependencyVersion.java +++ b/rewrite-gradle/src/main/java/org/openrewrite/gradle/UpgradeDependencyVersion.java @@ -687,7 +687,7 @@ public static GradleProject replaceVersion(GradleProject gp, ExecutionContext ct for (GradleDependencyConfiguration gdc : nameToConfiguration.values()) { GradleDependencyConfiguration newGdc = gdc .withRequested(ListUtils.map(gdc.getRequested(), requested -> maybeUpdateDependency(requested, newRequested))) - .withDirectResolved(ListUtils.map(gdc.getDirectResolved(), resolved -> maybeUpdateResolvedDependency(resolved, newDep))); + .withDirectResolved(ListUtils.map(gdc.getDirectResolved(), resolved -> maybeUpdateResolvedDependency(resolved, newDep, new HashSet<>()))); anyChanged |= newGdc != gdc; newNameToConfiguration.put(newGdc.getName(), newGdc); } @@ -711,10 +711,15 @@ private static org.openrewrite.maven.tree.Dependency maybeUpdateDependency( private static ResolvedDependency maybeUpdateResolvedDependency( ResolvedDependency dep, - ResolvedDependency newDep) { + ResolvedDependency newDep, + Set history) { if(Objects.equals(dep.getGroupId(), newDep.getGroupId()) && Objects.equals(dep.getArtifactId(), newDep.getArtifactId())) { return newDep; } - return dep.withDependencies(ListUtils.map(dep.getDependencies(), d -> maybeUpdateResolvedDependency(d, newDep))); + if (history.add(dep)) { + return dep.withDependencies(ListUtils.map(dep.getDependencies(), d -> maybeUpdateResolvedDependency(d, newDep, history))); + } + return dep; + } } From a39567d780b7e84add289f8669372ae9027e2753 Mon Sep 17 00:00:00 2001 From: Jente Sondervorst Date: Thu, 4 Jul 2024 22:16:45 +0200 Subject: [PATCH 2/5] Resolved stackoverflow exception for circular dependencies. Not able to test due to no known transitive circular dependencies in OSS packages. Fixes #4299 --- .../openrewrite/gradle/UpgradeDependencyVersion.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/rewrite-gradle/src/main/java/org/openrewrite/gradle/UpgradeDependencyVersion.java b/rewrite-gradle/src/main/java/org/openrewrite/gradle/UpgradeDependencyVersion.java index 4403cb9ad0a..fe17de40254 100644 --- a/rewrite-gradle/src/main/java/org/openrewrite/gradle/UpgradeDependencyVersion.java +++ b/rewrite-gradle/src/main/java/org/openrewrite/gradle/UpgradeDependencyVersion.java @@ -687,7 +687,7 @@ public static GradleProject replaceVersion(GradleProject gp, ExecutionContext ct for (GradleDependencyConfiguration gdc : nameToConfiguration.values()) { GradleDependencyConfiguration newGdc = gdc .withRequested(ListUtils.map(gdc.getRequested(), requested -> maybeUpdateDependency(requested, newRequested))) - .withDirectResolved(ListUtils.map(gdc.getDirectResolved(), resolved -> maybeUpdateResolvedDependency(resolved, newDep))); + .withDirectResolved(ListUtils.map(gdc.getDirectResolved(), resolved -> maybeUpdateResolvedDependency(resolved, newDep, new HashSet<>()))); anyChanged |= newGdc != gdc; newNameToConfiguration.put(newGdc.getName(), newGdc); } @@ -711,10 +711,15 @@ private static org.openrewrite.maven.tree.Dependency maybeUpdateDependency( private static ResolvedDependency maybeUpdateResolvedDependency( ResolvedDependency dep, - ResolvedDependency newDep) { + ResolvedDependency newDep, + Set history) { if(Objects.equals(dep.getGroupId(), newDep.getGroupId()) && Objects.equals(dep.getArtifactId(), newDep.getArtifactId())) { return newDep; } - return dep.withDependencies(ListUtils.map(dep.getDependencies(), d -> maybeUpdateResolvedDependency(d, newDep))); + if (history.add(dep)) { + return dep.withDependencies(ListUtils.map(dep.getDependencies(), d -> maybeUpdateResolvedDependency(d, newDep, history))); + } + return dep; + } } From 6e441858fbbb61752b5221a31860b6a8d8c774e3 Mon Sep 17 00:00:00 2001 From: Jente Sondervorst Date: Thu, 4 Jul 2024 22:35:25 +0200 Subject: [PATCH 3/5] Remove whiteline --- .../java/org/openrewrite/gradle/UpgradeDependencyVersion.java | 1 - 1 file changed, 1 deletion(-) diff --git a/rewrite-gradle/src/main/java/org/openrewrite/gradle/UpgradeDependencyVersion.java b/rewrite-gradle/src/main/java/org/openrewrite/gradle/UpgradeDependencyVersion.java index fe17de40254..035b5e03cc4 100644 --- a/rewrite-gradle/src/main/java/org/openrewrite/gradle/UpgradeDependencyVersion.java +++ b/rewrite-gradle/src/main/java/org/openrewrite/gradle/UpgradeDependencyVersion.java @@ -720,6 +720,5 @@ private static ResolvedDependency maybeUpdateResolvedDependency( return dep.withDependencies(ListUtils.map(dep.getDependencies(), d -> maybeUpdateResolvedDependency(d, newDep, history))); } return dep; - } } From c4d53357e0d5c2bbc3b482205615eb8a6f241b8d Mon Sep 17 00:00:00 2001 From: Jente Sondervorst Date: Sat, 6 Jul 2024 00:07:43 +0200 Subject: [PATCH 4/5] Built path traversal to not stop on first ocurence of library and update all nested libraries. --- .../openrewrite/gradle/UpgradeDependencyVersion.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/rewrite-gradle/src/main/java/org/openrewrite/gradle/UpgradeDependencyVersion.java b/rewrite-gradle/src/main/java/org/openrewrite/gradle/UpgradeDependencyVersion.java index 035b5e03cc4..acde28f7bad 100644 --- a/rewrite-gradle/src/main/java/org/openrewrite/gradle/UpgradeDependencyVersion.java +++ b/rewrite-gradle/src/main/java/org/openrewrite/gradle/UpgradeDependencyVersion.java @@ -712,13 +712,14 @@ private static org.openrewrite.maven.tree.Dependency maybeUpdateDependency( private static ResolvedDependency maybeUpdateResolvedDependency( ResolvedDependency dep, ResolvedDependency newDep, - Set history) { + Set traversalHistory) { + if(traversalHistory.contains(dep)) { + return dep; + } if(Objects.equals(dep.getGroupId(), newDep.getGroupId()) && Objects.equals(dep.getArtifactId(), newDep.getArtifactId())) { return newDep; } - if (history.add(dep)) { - return dep.withDependencies(ListUtils.map(dep.getDependencies(), d -> maybeUpdateResolvedDependency(d, newDep, history))); - } - return dep; + traversalHistory.add(dep); + return dep.withDependencies(ListUtils.map(dep.getDependencies(), d -> maybeUpdateResolvedDependency(d, newDep, new HashSet<>(traversalHistory)))); } } From 8865fb6531343974aa72f3716707e70e4335d272 Mon Sep 17 00:00:00 2001 From: Tim te Beek Date: Sat, 6 Jul 2024 14:04:27 +0200 Subject: [PATCH 5/5] Apply formatter, even you matchesd Sam's style --- .../org/openrewrite/gradle/UpgradeDependencyVersion.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/rewrite-gradle/src/main/java/org/openrewrite/gradle/UpgradeDependencyVersion.java b/rewrite-gradle/src/main/java/org/openrewrite/gradle/UpgradeDependencyVersion.java index acde28f7bad..2ef31d02251 100644 --- a/rewrite-gradle/src/main/java/org/openrewrite/gradle/UpgradeDependencyVersion.java +++ b/rewrite-gradle/src/main/java/org/openrewrite/gradle/UpgradeDependencyVersion.java @@ -160,7 +160,7 @@ private static boolean isLikelyDependencyConfiguration(Cursor cursor) { m = cursor.getValue(); String methodName = m.getSimpleName(); if ("constraints".equals(methodName) || "project".equals(methodName) || "modules".equals(methodName) - || "module".equals(methodName) ||"file".equals(methodName) || "files".equals(methodName)) { + || "module".equals(methodName) || "file".equals(methodName) || "files".equals(methodName)) { return false; } if (DEPENDENCY_DSL_MATCHER.matches(m)) { @@ -703,7 +703,7 @@ public static GradleProject replaceVersion(GradleProject gp, ExecutionContext ct private static org.openrewrite.maven.tree.Dependency maybeUpdateDependency( org.openrewrite.maven.tree.Dependency dep, org.openrewrite.maven.tree.Dependency newDep) { - if(Objects.equals(dep.getGroupId(), newDep.getGroupId()) && Objects.equals(dep.getArtifactId(), newDep.getArtifactId())) { + if (Objects.equals(dep.getGroupId(), newDep.getGroupId()) && Objects.equals(dep.getArtifactId(), newDep.getArtifactId())) { return newDep; } return dep; @@ -713,10 +713,10 @@ private static ResolvedDependency maybeUpdateResolvedDependency( ResolvedDependency dep, ResolvedDependency newDep, Set traversalHistory) { - if(traversalHistory.contains(dep)) { + if (traversalHistory.contains(dep)) { return dep; } - if(Objects.equals(dep.getGroupId(), newDep.getGroupId()) && Objects.equals(dep.getArtifactId(), newDep.getArtifactId())) { + if (Objects.equals(dep.getGroupId(), newDep.getGroupId()) && Objects.equals(dep.getArtifactId(), newDep.getArtifactId())) { return newDep; } traversalHistory.add(dep);