private List<IFile> listFiles(boolean includeFilesInNestedSubdirs) {
Map<String, ZipEntry> entriesByName = new LinkedHashMap<String, ZipEntry>();
for (ZipEntry entry : getAllEntries()) {
if (ZipDirectory.isInDir(getNameInZip(), entry, includeFilesInNestedSubdirs)) {
entriesByName.put(entry.getName(), entry);
}
}
List<IFile> files = new ArrayList<IFile>();
for (ZipEntry ze : entriesByName.values()) {
NestedZipDirectory parent = includeFilesInNestedSubdirs ? buildParent(ze, entriesByName) : this;
if (ze.isDirectory()) files.add(new NestedZipDirectory(archive, ze, parent, cache));
else files.add(new NestedZipFile(archive, ze, parent, cache));
}
return files;
}