*/
while (!workList.isEmpty()) {
if (Thread.interrupted()) {
throw new InterruptedException();
}
ClassDescriptor classDesc = workList.removeFirst();
if (seen.contains(classDesc)) {
continue;
}
seen.add(classDesc);
if (!knownDescriptors.contains(classDesc)) {
count++;
if (PROGRESS && count % 5000 == 0) {
System.out.println("Adding referenced class " + classDesc);
}
}
referencedPackageSet.add(classDesc.getPackageName());
// Get list of referenced classes and add them to set.
// Add superclasses and superinterfaces to worklist.
try {
XClass classNameAndInfo = Global.getAnalysisCache().getClassAnalysis(XClass.class, classDesc);
ClassDescriptor superclassDescriptor = classNameAndInfo.getSuperclassDescriptor();
if (superclassDescriptor != null && addedToWorkList.add(superclassDescriptor)) {
workList.addLast(superclassDescriptor);
}
for (ClassDescriptor ifaceDesc : classNameAndInfo.getInterfaceDescriptorList()) {
if (addedToWorkList.add(ifaceDesc)) {
workList.addLast(ifaceDesc);
}
}
ClassDescriptor enclosingClass = classNameAndInfo.getImmediateEnclosingClass();
if (enclosingClass != null && addedToWorkList.add(enclosingClass)) {
workList.addLast(enclosingClass);
}
} catch (RuntimeException e) {