private void buildReferencedClassSet() throws CheckedAnalysisException {
private void buildReferencedClassSet() throws CheckedAnalysisException, InterruptedException {
	private void buildReferencedClassSet() throws CheckedAnalysisException {		// XXX: should drive progress dialog (scanning phase)?				referencedClassSet = new TreeSet<ClassDescriptor>();				LinkedList<ClassDescriptor> workList = new LinkedList<ClassDescriptor>();		workList.addAll(appClassList);		Set<ClassDescriptor> seen = new HashSet<ClassDescriptor>();		Set<ClassDescriptor> appClassSet = new HashSet<ClassDescriptor>(appClassList);				Set<ClassDescriptor> badAppClassSet = new HashSet<ClassDescriptor>();				while (!workList.isEmpty()) {			ClassDescriptor classDesc = workList.removeFirst();						if (seen.contains(classDesc)) {				continue;			}			seen.add(classDesc);						referencedClassSet.add(classDesc);						// Get list of referenced classes and add them to set.			// Add superclasses and superinterfaces to worklist.			try {				ClassInfo classInfo = Global.getAnalysisCache().getClassAnalysis(ClassInfo.class, classDesc);				referencedClassSet.addAll(Arrays.asList(classInfo.getReferencedClassDescriptorList()));								if (classInfo.getSuperclassDescriptor() != null) {					workList.addLast(classInfo.getSuperclassDescriptor());				}								for (ClassDescriptor ifaceDesc : classInfo.getInterfaceDescriptorList()) {					workList.addLast(ifaceDesc);				}			} catch (MissingClassException e) {				// Just log it as a missing class				bugReporter.reportMissingClass(e.getClassDescriptor());				if (appClassSet.contains(classDesc)) {					badAppClassSet.add(classDesc);				}			} catch (CheckedAnalysisException e) {				// Failed to scan a referenced class --- just log the error and continue				bugReporter.logError("Error scanning " + classDesc + " for referenced classes", e);				if (appClassSet.contains(classDesc)) {					badAppClassSet.add(classDesc);				}			}		}				// Delete any application classes that could not be read		appClassList.removeAll(badAppClassSet);	}