code: @Override
      public JarEntry getNextJarEntry() throws IOException {
          closeEntry();
  
          final Iterator<VirtualFile> topItr = entryItr.peekFirst();
          if (topItr == null) {
              return null;
          }
          if (!topItr.hasNext()) {
              entryItr.pop();
              return getNextJarEntry();
          }
  
          final VirtualFile nextEntry = topItr.next();
          String entryName = getEntryName(nextEntry);
          if (nextEntry.isDirectory()) {
              List<VirtualFile> children = nextEntry.getChildren();
              if (entryName.equalsIgnoreCase(META_INF_DIR)) {
                  children = nextEntry.getChildren(MANIFEST_FILTER);
              }
              entryItr.add(children.iterator());
              entryName = fixDirectoryName(entryName);
          }
          openCurrent(nextEntry);
  
          Attributes attributes = null;
          final Manifest manifest = getManifest();
          if (manifest != null) {
              attributes = manifest.getAttributes(entryName);
          }
          return new VirtualJarEntry(entryName, nextEntry, attributes);
      }
docs: {@inheritDoc} *