if (commandLine.hashChangedSpecified) origCollection.computeBugHashes();
	public static void main(String[] args) throws Exception {		DetectorFactoryCollection.instance();		final FilterCommandLine commandLine = new FilterCommandLine();		int argCount = commandLine.parse(args, 0, 2, "Usage: " + Filter.class.getName()				+ " [options] [<orig results> [<new results]] ");		Project project = new Project();		SortedBugCollection origCollection = new SortedBugCollection();		if (argCount == args.length)			origCollection.readXML(System.in, project);		else			origCollection.readXML(args[argCount++], project);		boolean verbose = argCount < args.length;		I18N i18n = I18N.instance();		if (commandLine.categoryString != null) {			for (BugCategory bugCategory : i18n					.getBugCategoryObjects())				if (bugCategory.getAbbrev().equals(commandLine.categoryString)) {					commandLine.categoryKey = bugCategory.getCategory();					break;				}			if (commandLine.categoryKey == null)				for (BugCategory bugCategory : i18n						.getBugCategoryObjects())					if (bugCategory.getAbbrev().startsWith(							commandLine.categoryString)) {						commandLine.categoryKey = bugCategory.getCategory();						break;					}		}				if (commandLine.designationString != null) {			for (String designationKey : i18n.getUserDesignationKeys()) {				if (designationKey.startsWith(commandLine.designationString) 						|| i18n.getUserDesignation(designationKey).startsWith(commandLine.designationString)) {					commandLine.designationKey = designationKey;					break;				}								}		}		SortedBugCollection resultCollection = origCollection.createEmptyCollectionWithMetadata();		int passed = 0;		int dropped = 0;		resultCollection.setWithMessages(commandLine.withMessages);		commandLine.adjustFilter(resultCollection);		resultCollection.getProjectStats().clearBugCounts();		sourceSearcher = new SourceSearcher(project);		for (BugInstance bug : origCollection.getCollection())			if (commandLine.accept(bug)) {				resultCollection.add(bug, false);				if (bug.getLastVersion() == -1 )					resultCollection.getProjectStats().addBug(bug);				passed++;			} else				dropped++;		if (verbose)			System.out.println(passed + " warnings passed through, " + dropped				+ " warnings dropped");		if (argCount == args.length) {			assert !verbose;			resultCollection.writeXML(System.out, project);		}		else {			resultCollection.writeXML(args[argCount++], project);		}	}