@@ -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