private JavaFileObject create( final @NonNull String pkg, final @NonNull Folder f, final @NonNull int off, final @NonNull Predicate<String> predicate) { String baseName = getString(f.indices[off], f.indices[off+1]); if (baseName != null && predicate.apply(baseName)) { long mtime = join(f.indices[off+3], f.indices[off+2]); if (zipFile == null) { if (f.delta == 4) { return FileObjects.zipFileObject(archiveFile, pkg, baseName, mtime); } else { assert f.delta == 6; long offset = join(f.indices[off+5], f.indices[off+4]); return FileObjects.zipFileObject(archiveFile, pkg, baseName, mtime, offset); } } else { return FileObjects.zipFileObject( getArchive(f.flags), getPathToRoot(f.flags), pkg, baseName, mtime); } } return null; }