processWorkList(classPath, projectWorkList); processWorkList(classPath, buildSystemCodebaseList());
processWorkList(classPath, projectWorkList, progress); processWorkList(classPath, buildSystemCodebaseList(), progress);
	public void build(IClassPath classPath) throws ResourceNotFoundException, IOException, InterruptedException {		// Discover all directly and indirectly referenced codebases		processWorkList(classPath, projectWorkList);		processWorkList(classPath, buildSystemCodebaseList());				// Add all discovered codebases to the classpath		for (DiscoveredCodeBase discoveredCodeBase : discoveredCodeBaseList) {			classPath.addCodeBase(discoveredCodeBase.getCodeBase());		}				Set<ClassDescriptor> appClassSet = new HashSet<ClassDescriptor>();				// Build collection of all application classes.		// Also, add resource name -> codebase entry mappings for application classes.		for (DiscoveredCodeBase discoveredCodeBase : discoveredCodeBaseList) {			if (!discoveredCodeBase.getCodeBase().isApplicationCodeBase()) {				continue;			}					codeBaseEntryLoop:			for (ICodeBaseIterator i = discoveredCodeBase.iterator(); i.hasNext(); ) {				ICodeBaseEntry entry = i.next();				if (!ClassDescriptor.isClassResource(entry.getResourceName())) {					continue;				}								ClassDescriptor classDescriptor =					ClassDescriptor.fromResourceName(entry.getResourceName());				if (appClassSet.contains(classDescriptor)) {					// An earlier entry takes precedence over this class					continue codeBaseEntryLoop;				}				appClassSet.add(classDescriptor);				appClassList.add(classDescriptor);								classPath.mapResourceNameToCodeBaseEntry(entry.getResourceName(), entry);			}		}				if (DEBUG) {			System.out.println("Classpath:");			dumpCodeBaseList(classPath.appCodeBaseIterator(), "Application codebases");			dumpCodeBaseList(classPath.auxCodeBaseIterator(), "Auxiliary codebases");		}	}