Skip to content

Commit b3c6ea4

Browse files
shanman190kmccarp
andauthored
Further improvements to reduce GC pressure (#6296)
Co-authored-by: Kevin Carpenter™️ <kevin@moderne.io>
1 parent 554fce6 commit b3c6ea4

File tree

1 file changed

+10
-4
lines changed

1 file changed

+10
-4
lines changed

rewrite-gradle/src/main/java/org/openrewrite/gradle/marker/GradleDependencyConfiguration.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,8 @@ public List<ResolvedDependency> getResolved() {
243243
if (resolved == null) {
244244
List<ResolvedDependency> newResolved = new ArrayList<>(getDirectResolved());
245245
Map<GroupArtifact, ResolvedDependency> alreadyResolved = new HashMap<>();
246-
resolveTransitiveDependencies(newResolved, alreadyResolved);
246+
Map<GroupArtifact, Version> versionCache = new HashMap<>();
247+
resolveTransitiveDependencies(newResolved, alreadyResolved, versionCache);
247248
resolved = new ArrayList<>(alreadyResolved.values());
248249
}
249250
return resolved;
@@ -391,20 +392,25 @@ void unsafeSetDirectResolved(List<ResolvedDependency> directResolved) {
391392
this.directResolved = directResolved;
392393
}
393394

394-
private static void resolveTransitiveDependencies(List<ResolvedDependency> resolved, Map<GroupArtifact, ResolvedDependency> alreadyResolved) {
395+
private static void resolveTransitiveDependencies(List<ResolvedDependency> resolved, Map<GroupArtifact, ResolvedDependency> alreadyResolved, Map<GroupArtifact, Version> versionCache) {
395396
for (ResolvedDependency dependency : resolved) {
396397
GroupArtifact ga = dependency.getGav().asGroupArtifact();
397398
if (alreadyResolved.containsKey(ga)) {
398399
ResolvedDependency alreadyPresent = alreadyResolved.get(ga);
400+
if (alreadyPresent.getVersion().equals(dependency.getVersion()) && alreadyPresent.getDependencies().size() == dependency.getDependencies().size()) {
401+
continue;
402+
}
403+
399404
Version newVersion = new Version(dependency.getVersion());
400-
Version presentVersion = new Version(alreadyPresent.getVersion());
405+
Version presentVersion = versionCache.computeIfAbsent(ga, ignored -> new Version(alreadyPresent.getVersion()));
401406
int compared = presentVersion.compareTo(newVersion);
402407
if (compared > 0 || (compared == 0 && alreadyPresent.getDependencies().size() == dependency.getDependencies().size())) {
403408
continue;
404409
}
410+
versionCache.replace(ga, newVersion);
405411
}
406412
alreadyResolved.put(ga, dependency);
407-
resolveTransitiveDependencies(dependency.getDependencies(), alreadyResolved);
413+
resolveTransitiveDependencies(dependency.getDependencies(), alreadyResolved, versionCache);
408414
}
409415
}
410416

0 commit comments

Comments
 (0)