@Override @CheckForNull public JavaFileObject getFile(@NonNull String name) throws IOException { if (separator != FileObjects.NBFS_SEPARATOR_CHAR) { name = name.replace(FileObjects.NBFS_SEPARATOR_CHAR, separator); } final Path target = root.resolve(name); return Files.exists(target) ? FileObjects.pathFileObject(target, root, rootURI, null) : null; }
@Override @NonNull public Iterable<JavaFileObject> getFiles( @NonNull String folderName, @NullAllowed final ClassPath.Entry entry, @NullAllowed final Set<JavaFileObject.Kind> kinds, @NullAllowed final JavaFileFilterImplementation filter) throws IOException { if (separator != FileObjects.NBFS_SEPARATOR_CHAR) { folderName = folderName.replace(FileObjects.NBFS_SEPARATOR_CHAR, separator); } final Path target = root.resolve(folderName); try (DirectoryStream<Path> dir = Files.newDirectoryStream(target, new KindFilter(kinds))) { final List<JavaFileObject> res = new ArrayList<>(); for (Path dirEnt : dir) { res.add(FileObjects.pathFileObject(dirEnt, root, rootURI, null)); } return res; } catch (NotDirectoryException | NoSuchFileException e) { return Collections.emptyList(); } }
@Override @CheckForNull public synchronized JavaFileObject getFile(@NonNull final String name) throws IOException { init(); final String[] fnPair = FileObjects.getFolderAndBaseName(name, FileObjects.NBFS_SEPARATOR_CHAR); final int[] pkgContent = data.get(fnPair[0]); if (pkgContent != null) { for (int i = 0; i < pkgContent.length; i+=2) { final String baseName = getName(pkgContent[i], pkgContent[i+1]); if (fnPair[1].equals(baseName)) { return FileObjects.pathFileObject( fnPair[0], fnPair[1], root, rootURI, null); } } } return null; }
@Override @NonNull public synchronized Iterable<JavaFileObject> getFiles( @NonNull String folderName, @NullAllowed final ClassPath.Entry entry, @NullAllowed Set<JavaFileObject.Kind> kinds, @NullAllowed JavaFileFilterImplementation filter) throws IOException { init(); final int[] pkgContent = data.get(folderName); if (pkgContent == null || pkgContent == EMPTY_FOLDER) { return Collections.emptyList(); } final List<JavaFileObject> res = new ArrayList<>(pkgContent.length>>>1); for (int i = 0; i < pkgContent.length; i+=2) { final String name = getName(pkgContent[i], pkgContent[i+1]); if (kinds == null || kinds.contains(FileObjects.getKind(FileObjects.getExtension(name)))) { res.add(FileObjects.pathFileObject( folderName, name, root, rootURI, null)); } } return res; }