From 608ca8a235a1c51f83c29ccc34cefe4758566779 Mon Sep 17 00:00:00 2001
From: brinn <brinn>
Date: Thu, 21 Jun 2007 19:30:13 +0000
Subject: [PATCH] improvement: ensure that dependent projects are visited only
 once (performance)

SVN: 648
---
 .../SVNDependentProjectsCollector.java           | 16 +++++++++++++++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/ant_tasks/source/java/ch/systemsx/cisd/ant/task/subversion/SVNDependentProjectsCollector.java b/ant_tasks/source/java/ch/systemsx/cisd/ant/task/subversion/SVNDependentProjectsCollector.java
index 07baab6c72b..a5dc0da16ac 100644
--- a/ant_tasks/source/java/ch/systemsx/cisd/ant/task/subversion/SVNDependentProjectsCollector.java
+++ b/ant_tasks/source/java/ch/systemsx/cisd/ant/task/subversion/SVNDependentProjectsCollector.java
@@ -16,6 +16,7 @@
 
 package ch.systemsx.cisd.ant.task.subversion;
 
+import java.util.HashSet;
 import java.util.LinkedHashSet;
 import java.util.Set;
 
@@ -71,17 +72,30 @@ class SVNDependentProjectsCollector
         private final Set<String> projects;
 
         private final String projectPath;
+        
+        private final Set<String> locationsAlreadyVisited;
 
         ProjectHandler(Set<String> projects, String projectPath)
+        {
+            this(projects, projectPath, new HashSet<String>());
+        }
+
+        ProjectHandler(Set<String> projects, String projectPath, Set<String> locationsAlreadyVisited)
         {
             this.projects = projects;
             this.projectPath = projectPath;
+            this.locationsAlreadyVisited = locationsAlreadyVisited;
         }
 
         @Override
         public IEclipseClasspathLocation createLocation()
         {
             final String displayableLocation = projectPath + "/" + EclipseClasspathReader.CLASSPATH_FILE;
+            if (locationsAlreadyVisited.contains(displayableLocation))
+            {
+                return null;
+            }
+            locationsAlreadyVisited.add(displayableLocation);
             try
             {
                 final String eclipseClasspath = actions.cat(displayableLocation);
@@ -111,7 +125,7 @@ class SVNDependentProjectsCollector
         public IProjectHandler createHandler(EclipseClasspathEntry entry)
         {
             final String projectName = SVNUtilities.getTopLevelDirectory(entry.getPath());
-            return new ProjectHandler(projects, pathProvider.getPath(projectName));
+            return new ProjectHandler(projects, pathProvider.getPath(projectName), locationsAlreadyVisited);
         }
 
     }
-- 
GitLab