code: static PathFileObject forDirectoryPath(BaseFileManager fileManager, Path path,
              Path userPackageRootDir, RelativePath relativePath) {
          return new DirectoryFileObject(fileManager, path, userPackageRootDir, relativePath);
      }
docs: Create a PathFileObject for a file within a directory, such that the
  binary name can be inferred from the relationship to an enclosing directory.
  
  The binary name is derived from {@code relativePath}.
  The name is derived from the composition of {@code userPackageRootDir}
  and {@code relativePath}.
  
  @param fileManager the file manager creating this file object
  @param path the absolute path referred to by this file object
  @param userPackageRootDir the path of the directory containing the
  root of the package hierarchy
  @param relativePath the path of this file relative to {@code userPackageRootDir}