private boolean tryBuild(PrintWriter writer, BundleJavaManager bundleJavaManager,
			List<ResourceFileJavaFileObject> sourceFiles, List<String> options) throws IOException {
		DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<>();
		JavaCompiler.CompilationTask task =
			compiler.getTask(writer, bundleJavaManager, diagnostics, options, null, sourceFiles);

		Boolean successfulCompilation = task.call();
		if (successfulCompilation) {
			return true;
		}

		Set<ResourceFileJavaFileObject> filesWithErrors = new HashSet<>();
		for (Diagnostic<? extends JavaFileObject> diagnostic : diagnostics.getDiagnostics()) {
			String error = diagnostic.toString() + "\n";
			writer.write(error);
			ResourceFileJavaFileObject sourceFileObject =
				(ResourceFileJavaFileObject) diagnostic.getSource();
			ResourceFile sourceFile = sourceFileObject.getFile();
			buildError(sourceFile, error); // remember all errors for this file
			filesWithErrors.add(sourceFileObject);
		}
		for (ResourceFileJavaFileObject sourceFileObject : filesWithErrors) {
			if (sourceFiles.remove(sourceFileObject)) {
				writer.printf("skipping %s\n", sourceFileObject.getFile().toString());
			}
			else {
				// we can't tolerate infinite loops here, so bail
				throw new IOException("compilation error loop condition for " +
					sourceFileObject.getFile().toString());
			}
		}
		return false;
	}
visit discrepancies between java source and corresponding class files.

<pre>
walk resources to find:
 - source files that are newer than their corresponding binary
		reports (source file, list of corresponding binaries)
	- source files with no corresponding binary
		reports (source file, empty list)
 - binary files with no corresponding source
 	reports (null, list of binary files)
 
  for a source file source_root/com/blah/Blah.java
  
  all of the following binaries would correspond:
  	binary_root/com/blah/Blah.class
  	binary_root/com/blah/Blah$Inner.class
  	binary_root/com/blah/Blah$12.class
  	binary_root/com/blah/Blah$12.class
  	binary_root/com/blah/Blah$Inner$Innerer.class
  	...
</pre>
@param discrepancy the discrepancy callback
Ghidra/Features/Base/src/main/java/ghidra/app/plugin/core/osgi/GhidraSourceBundle.java