class ZipAnalyzer extends FileAnalyzer {

    protected ZipAnalyzer(AnalyzerFactory factory) {
        super(factory);
    }

    /**
     * @return {@code null} as there is no aligned language
     */
    @Override
    public String getCtagsLang() {
        return null;
    }

    /**
     * Gets a version number to be used to tag processed documents so that
     * re-analysis can be re-done later if a stored version number is different
     * from the current implementation.
     * @return 20180112_00
     */
    @Override
    protected int getSpecializedVersionNo() {
        return 20180112_00; // Edit comment above too!
    }

    @Override
    public void analyze(Document doc, StreamSource src, Writer xrefOut) throws IOException {<FILL_FUNCTION_BODY>}
}

        ArrayList<String> names = new ArrayList<>();

        try (ZipInputStream zis = new ZipInputStream(src.getStream())) {
            ZipEntry entry;
            while ((entry = zis.getNextEntry()) != null) {
                String name = entry.getName();
                names.add(name);
                if (xrefOut != null) {
                    Util.htmlize(name, xrefOut);
                    xrefOut.append("<br/>");
                }
            }
        }

        doc.add(new OGKTextField(QueryBuilder.FULL, new IteratorReader(names)));
    
<methods>public void <init>(org.opengrok.indexer.analysis.AnalyzerFactory) ,public void analyze(Document, org.opengrok.indexer.analysis.StreamSource, java.io.Writer) throws java.io.IOException, java.lang.InterruptedException,public java.lang.String getCtagsLang() ,public java.lang.String getFileTypeName() ,public final long getVersionNo() ,public org.opengrok.indexer.analysis.Xrefer writeXref(org.opengrok.indexer.analysis.WriteXrefArgs) throws java.io.IOException<variables>private static final java.util.logging.Logger LOGGER