} else if (option.equals("-sourceInfo")) { sourceInfoFile = argument;
		protected void handleOptionWithArgument(String option, String argument) throws IOException {			if (option.equals("-outputFile")) {				String outputFile = argument;				try {					outputStream = new PrintStream(new BufferedOutputStream(new FileOutputStream(outputFile)));				} catch (IOException e) {					System.err.println("Couldn't open " + outputFile + " for output: " + e.toString());					System.exit(1);				}			} else if (option.equals("-release")) {				this.releaseName = argument;			} else if (option.equals("-visitors") || option.equals("-omitVisitors")) {				boolean omit = option.equals("-omitVisitors");				if (!omit) {					// Selecting detectors explicitly, so start out by					// disabling all of them.  The selected ones will					// be re-enabled.					userPreferences.enableAllDetectors(false);				}				// Explicitly enable or disable the selected detectors.				StringTokenizer tok = new StringTokenizer(argument, ",");				while (tok.hasMoreTokens()) {					String visitorName = tok.nextToken();					DetectorFactory factory = DetectorFactoryCollection.instance().getFactory(visitorName);					if (factory == null)						throw new IllegalArgumentException("Unknown detector: " + visitorName);					userPreferences.enableDetector(factory, !omit);				}			} else if (option.equals("-chooseVisitors")) {				// This is like -visitors and -omitVisitors, but				// you can selectively enable and disable detectors,				// starting from the default set (or whatever set				// happens to be in effect).				choose(argument, "Detector choices", new Chooser() {					public void choose(boolean enabled, String what) {						DetectorFactory factory = DetectorFactoryCollection.instance()							.getFactory(what);						if (factory == null)							throw new IllegalArgumentException("Unknown detector: " + what);						if (DEBUG) {							System.err.println("Detector " + factory.getShortName() + " " +									(enabled ? "enabled" : "disabled") +									", userPreferences="+System.identityHashCode(userPreferences));						}						userPreferences.enableDetector(factory, enabled);					}				});			} else if (option.equals("-choosePlugins")) {				// Selectively enable/disable plugins				choose(argument, "Plugin choices", new Chooser() {					public void choose(boolean enabled, String what) {						Plugin plugin = DetectorFactoryCollection.instance().getPluginById(what);						if (plugin == null)							throw new IllegalArgumentException("Unknown plugin: " + what);						plugin.setEnabled(enabled);					}				});			} else if (option.equals("-adjustPriority")) {				// Selectively raise or lower the priority of warnings				// produced by specified detectors.								StringTokenizer tok = new StringTokenizer(argument, ",");				while (tok.hasMoreTokens()) {					String token = tok.nextToken();					int eq = token.indexOf('=');					if (eq < 0)						throw new IllegalArgumentException("Illegal priority adjustment: " + token);					String visitorName = token.substring(0, eq);					DetectorFactory factory = DetectorFactoryCollection.instance()						.getFactory(visitorName);					if (factory == null)						throw new IllegalArgumentException("Unknown detector: " + visitorName);										String adjustment = token.substring(eq + 1);					if (!(adjustment.equals("raise") || adjustment.equals("lower")))						throw new IllegalArgumentException("Illegal priority adjustment value: " +								adjustment);										// Recall that lower values are higher priorities					factory.setPriorityAdjustment(adjustment.equals("raise") ? -1 : +1);				}			} else if (option.equals("-bugCategories")) {				this.bugCategorySet = handleBugCategories(userPreferences, argument);			} else if (option.equals("-onlyAnalyze")) {				// The argument is a comma-separated list of classes and packages				// to select to analyze.  (If a list item ends with ".*",				// it specifies a package, otherwise it's a class.)				StringTokenizer tok = new StringTokenizer(argument, ",");				while (tok.hasMoreTokens()) {					String item = tok.nextToken();					if (item.endsWith(".-"))						classScreener.addAllowedPrefix(item.substring(0, item.length() - 1));					else if (item.endsWith(".*"))						classScreener.addAllowedPackage(item.substring(0, item.length() - 1));					else						classScreener.addAllowedClass(item);				}			} else if (option.equals("-exclude")) {				if (excludeFilterFile != null) 					throw new IllegalArgumentException("Can specify one exclude filter file");				excludeFilterFile = argument;			} else if (option.equals("-include")) {				if (includeFilterFile != null) 					throw new IllegalArgumentException("Can specify one include filter file");				includeFilterFile = argument;			} else if (option.equals("-auxclasspath")) {				StringTokenizer tok = new StringTokenizer(argument, File.pathSeparator);				while (tok.hasMoreTokens())					project.addAuxClasspathEntry(tok.nextToken());			} else if (option.equals("-sourcepath")) {				StringTokenizer tok = new StringTokenizer(argument, File.pathSeparator);				while (tok.hasMoreTokens())					project.addSourceDir(new File(tok.nextToken()).getAbsolutePath());			} else {				super.handleOptionWithArgument(option, argument);			}		}