ClassDescriptor classDescriptor = new ClassDescriptor(className.replace('.', '/')); detector.visitClass(classDescriptor);
detector.visitClassContext(classContext);
	private void examineClass(AnalysisPass analysisPass, String className) throws InterruptedException {		if (DEBUG) System.out.println("Examining class " + className);		long entireClassAnalysisStart = 0;						if (TIMEDEBUG || DEBUG)  {			entireClassAnalysisStart = System.currentTimeMillis();		}		this.currentClass = className;				Detector2[] detectors = analysisPass.getDetectorList();		try {			JavaClass javaClass = Repository.lookupClass(className);			// Notify ClassObservers			for (ClassObserver aClassObserverList : classObserverList) {				aClassObserverList.observeClass(javaClass);			}			// Create a ClassContext for the class			ClassContext classContext = analysisContext.getClassContext(javaClass);			// Run the Detectors			for (Detector2 detector1 : detectors) {				if (Thread.interrupted())					throw new InterruptedException();				Detector2 detector = detector1;				// MUSTFIX: Evaluate whether this makes a difference				if (false && detector instanceof StatelessDetector) {						try {							detector = (Detector2) ((StatelessDetector) detector).clone();						} catch (CloneNotSupportedException e) {							throw new RuntimeException(e);						}				}				try {					long start = 0, end;					if (TIMEDEBUG || DEBUG) {						start = System.currentTimeMillis();						if (DEBUG) {							System.out.println("  running " + detector.getClass().getName());						}					}					//detector.visitClassContext(classContext);					ClassDescriptor classDescriptor = new ClassDescriptor(className.replace('.', '/'));					detector.visitClass(classDescriptor);					if (TIMEDEBUG || DEBUG) {						end = System.currentTimeMillis();						long delta = end - start;						entireClassAnalysisStart += delta;						if (delta > TIMEQUANTUM)							System.out.println("TIME: " + detector.getClass().getName() + " " + className + " " + delta);						if (DEBUG) {							String detectorName = detector.getClass().getName();							Long total = detectorTimings.get(detectorName);							if (total == null)								total = new Long(delta);							else								total = new Long(total.longValue() + delta);							detectorTimings.put(detectorName, total);						}					}				} catch (CheckedAnalysisException e) {					reportRecoverableDetectorException(className, detector, e);				} catch (AnalysisException e) {					reportRecoverableDetectorException(className, detector, e);				} catch (ArrayIndexOutOfBoundsException e) {					reportRecoverableDetectorException(className, detector, e);				} catch (ClassCastException e) {					reportRecoverableDetectorException(className, detector, e);				}			}		} catch (ClassNotFoundException e) {			// This should never happen unless there are bugs in BCEL.			bugReporter.reportMissingClass(e);			reportRecoverableException(className, e);		} catch (ClassFormatException e) {			reportRecoverableException(className, e);		}		catch (RuntimeException re) {			RuntimeException annotatedEx;			try {				String sep = System.getProperty("line.separator");				Constructor<? extends RuntimeException> c = re.getClass().getConstructor(new Class[] { String.class });				String msg = re.getMessage();				msg = sep + "While finding bugs in class: " + className + ((msg == null) ? "" : (sep + msg));				annotatedEx = c.newInstance(new Object[] {msg});				annotatedEx.setStackTrace(re.getStackTrace());			} catch (RuntimeException e) {				throw re;			} catch (Exception e) {				throw re;			}			throw annotatedEx;		}		if (TIMEDEBUG || DEBUG) {			long classSetupTime = System.currentTimeMillis() - entireClassAnalysisStart;			if (classSetupTime > TIMEQUANTUM)				System.out.println("TIME:  setup " + className + " " + classSetupTime); 		}		progressCallback.finishClass();	}