int length = roots.length;
ClasspathLocation[] cpLocations = new ClasspathLocation[length];
int index = 0;
JavaModelManager manager = JavaModelManager.getJavaModelManager();
for (int i = 0; i < length; i++) {
PackageFragmentRoot root = (PackageFragmentRoot) roots[i];
IPath path = root.getPath();
try {
if (root.isArchive()) {
ZipFile zipFile = manager.getZipFile(path);
cpLocations[index++] = new ClasspathJar(zipFile, ((ClasspathEntry) root.getRawClasspathEntry()).getAccessRuleSet());
} else {
Object target = JavaModel.getTarget(workspaceRoot, path, false);
if (target == null) {
// target doesn't exist any longer
// just resize cpLocations
System.arraycopy(cpLocations, 0, cpLocations = new ClasspathLocation[cpLocations.length-1], 0, index);
} else if (root.getKind() == IPackageFragmentRoot.K_SOURCE) {
cpLocations[index++] = new ClasspathSourceDirectory((IContainer)target, root.fullExclusionPatternChars(), root.fullInclusionPatternChars());
} else {
cpLocations[index++] = ClasspathLocation.forBinaryFolder((IContainer) target, false, ((ClasspathEntry) root.getRawClasspathEntry()).getAccessRuleSet());
}
}
} catch (CoreException e1) {
// problem opening zip file or getting root kind
// consider root corrupt and ignore