IClasspathEntry[] entries = project.getRawClasspath();
List<IClasspathEntry> queue = new ArrayList<IClasspathEntry>(entries.length);
queue.addAll(Arrays.asList(entries));
while (!queue.isEmpty()) {
IClasspathEntry entry = queue.remove(0);
if (exports && !entry.isExported())
continue;
IPath path = entry.getPath();
switch (entry.getEntryKind()) {
case IClasspathEntry.CPE_LIBRARY :
files.add(getFileForPath(path));
break;
case IClasspathEntry.CPE_VARIABLE :
IPath resolvedPath = JavaCore.getResolvedVariablePath(path);
files.add(getFileForPath(resolvedPath));
break;
case IClasspathEntry.CPE_SOURCE :
IPath outputLocation = entry.getOutputLocation();
if (exports && outputLocation != null)
files.add(getFileForPath(outputLocation));
break;
case IClasspathEntry.CPE_CONTAINER :
IClasspathContainer container = JavaCore.getClasspathContainer(path, project);
boolean allow = true;
for (Predicate<IClasspathContainer> filter : containerFilters)
if (!filter.select(container))
allow = false;
if (allow)
queue.addAll(Arrays.asList(container.getClasspathEntries()));
break;
case IClasspathEntry.CPE_PROJECT :
IProject targetProject = ResourcesPlugin.getWorkspace().getRoot().getProject(path.lastSegment());
IJavaProject targetJavaProject = JavaCore.create(targetProject);
accumulateClasspath(files, targetJavaProject, true, containerFilters);
break;
default :
logger.logError("Unhandled IPath entryKind of " + entry.getEntryKind(), null);
break;
}
}
}