private LinkedList<DomainFile> buildDomainFileList()
			throws CancelledException, VersionException, IOException {
		ArrayList<DomainFolder> folders = new ArrayList<DomainFolder>();
		while (true) {
			monitor.checkCancelled();
			try {
				DomainFolder folder =
					askProjectFolder("Add a top-level project folder (cancel to quit)");
				folders.add(folder);
			}
			catch (CancelledException e) {
				break;
			}
		}

		LinkedList<DomainFile> domainFiles = new LinkedList<DomainFile>();
		monitor.setMessage("Finding domain files...");
		for (DomainFolder folder : folders) {
			monitor.checkCancelled();
			findDomainFiles(domainFiles, folder);
		}
		return domainFiles;
	}
Runs through recursively through a set of folders provided by the user.
Programs are assumed to be "marked", meaning that functions all have their correct labels.
Each function in each program is searched within the active FID databases and various statistics
are calculated.
   1) Match found/not found
   2) Are any matches found correct (as compared to existing symbol)
   3) Are there multiple potential matches (whether correct or not)

If program symbols are mangled, this script assumes the primary symbol is not demangled.
Ghidra/Features/FunctionID/ghidra_scripts/FidStatistics.java