if (classProducer.containsSourceFiles()) project.addSourceDir(fileName);
  private void addFileToRepository(String fileName, List<String> repositoryClassList)	throws IOException, InterruptedException {     try {	ClassProducer classProducer;	// Create the ClassProducer	if (fileName.endsWith(".jar") || fileName.endsWith(".zip") || fileName.endsWith(".war") || fileName.endsWith(".ear"))		classProducer = new ZipClassProducer(fileName);	else if (fileName.endsWith(".class"))		classProducer = new SingleClassProducer(fileName);	else {		File dir = new File(fileName);		if (!dir.isDirectory())			throw new IOException("Path " + fileName + " is not an archive, class file, or directory");		classProducer = new DirectoryClassProducer(fileName);	}	// Load all referenced classes into the Repository	for (;;) {		if (Thread.interrupted())			throw new InterruptedException();		try {			JavaClass jclass = classProducer.getNextClass();			if (jclass == null)				break;			Repository.addClass(jclass);			repositoryClassList.add(jclass.getClassName());		} catch (ClassFormatException e) {			e.printStackTrace();			bugReporter.logError(e.getMessage());		}	}	progressCallback.finishArchive();     } catch (IOException e) {	// You'd think that the message for a FileNotFoundException would include	// the filename, but you'd be wrong.  So, we'll add it explicitly.	throw new IOException("Could not analyze " + fileName + ": " + e.getMessage());     }  }