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;
}