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