Internally, JavacFileManager uses Strings to represent paths, and is inconsistent whether such paths should be system-independent (e.g. always use /) or system-dependent (e.g. use File.separatorChar).
We should replace the use of String with some other class that enforces a consistent invariant.
We should also provide better unit tests of JavacFileManager.
Add RelativePath/RelativeFile/RelativeDir to encapsulate system independent relative paths, with methods to translate to the file system as needed.