Index: /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/actions/downloadtasks/DownloadPMTilesTask.java
===================================================================
--- /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/actions/downloadtasks/DownloadPMTilesTask.java	(revision 36218)
+++ /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/actions/downloadtasks/DownloadPMTilesTask.java	(revision 36219)
@@ -28,10 +28,18 @@
  */
 public class DownloadPMTilesTask implements DownloadTask {
+    /** Zoom to the PMTiles bounds after download */
     private boolean zoomAfterDownload;
+    /** Cancel adding the layer if this is true */
     private boolean cancel;
+    /** The URL for the tiles */
     private String url;
+    /** Any recoverable errors from reading the PMTiles */
     private final List<Object> errorObjects = new ArrayList<>();
+    /** The bounds for the layer */
     private Bounds bounds;
 
+    /**
+     * Add the appropriate layer to JOSM
+     */
     private void addLayer() {
         if (this.cancel) {
Index: /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/data/imagery/PMTilesImageryInfo.java
===================================================================
--- /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/data/imagery/PMTilesImageryInfo.java	(revision 36218)
+++ /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/data/imagery/PMTilesImageryInfo.java	(revision 36219)
@@ -6,8 +6,9 @@
 import java.util.Objects;
 
-import jakarta.json.JsonObject;
 import org.openstreetmap.josm.data.imagery.ImageryInfo;
 import org.openstreetmap.josm.plugins.pmtiles.lib.Header;
 import org.openstreetmap.josm.plugins.pmtiles.lib.PMTiles;
+
+import jakarta.json.JsonObject;
 
 /**
@@ -15,5 +16,7 @@
  */
 public class PMTilesImageryInfo extends ImageryInfo {
+    /** The PMTiles header for this info */
     private final Header header;
+    /** The metadata for this info */
     private final JsonObject meta;
 
Index: /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/data/imagery/package-info.java
===================================================================
--- /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/data/imagery/package-info.java	(revision 36219)
+++ /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/data/imagery/package-info.java	(revision 36219)
@@ -0,0 +1,5 @@
+// License: GPL. For details, see LICENSE file.
+/**
+ * Information for PMTiles imagery sources
+ */
+package org.openstreetmap.josm.plugins.pmtiles.data.imagery;
Index: /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/gui/io/importexport/package-info.java
===================================================================
--- /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/gui/io/importexport/package-info.java	(revision 36219)
+++ /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/gui/io/importexport/package-info.java	(revision 36219)
@@ -0,0 +1,5 @@
+// License: GPL. For details, see LICENSE file.
+/**
+ * Classes for importing from PMTiles
+ */
+package org.openstreetmap.josm.plugins.pmtiles.gui.io.importexport;
Index: /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/gui/layers/PMTileJob.java
===================================================================
--- /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/gui/layers/PMTileJob.java	(revision 36218)
+++ /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/gui/layers/PMTileJob.java	(revision 36219)
@@ -30,8 +30,20 @@
  */
 class PMTileJob extends JCSCachedTileLoaderJob<String, CacheEntry> implements TileJob, ICachedLoaderListener {
+    /** The tile we are fetching */
     private final Tile tile;
+    /** The tiles information */
     private final Header header;
+    /** The directory cache */
     private final DirectoryCache directoryCache;
 
+    /**
+     * Create a new job
+     * @param cache cache instance that we will work on
+     * @param options options of the request
+     * @param downloadJobExecutor that will be executing the jobs
+     * @param header The header for the tiles
+     * @param tile The tile to fetch
+     * @param directoryCache The cache of directories
+     */
     PMTileJob(ICacheAccess<String, CacheEntry> cache,
               TileJobOptions options,
Index: /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/gui/layers/PMTilesImageLayer.java
===================================================================
--- /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/gui/layers/PMTilesImageLayer.java	(revision 36218)
+++ /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/gui/layers/PMTilesImageLayer.java	(revision 36219)
@@ -2,12 +2,20 @@
 package org.openstreetmap.josm.plugins.pmtiles.gui.layers;
 
+import java.awt.Graphics2D;
+import java.awt.GridBagConstraints;
 import java.util.Collection;
 import java.util.Collections;
 
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
 import org.openstreetmap.gui.jmapviewer.interfaces.TileLoader;
+import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.imagery.vectortile.mapbox.MVTFile;
 import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
+import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.gui.layer.AbstractCachedTileSourceLayer;
 import org.openstreetmap.josm.plugins.pmtiles.data.imagery.PMTilesImageryInfo;
+import org.openstreetmap.josm.tools.GBC;
 
 /**
@@ -72,4 +80,22 @@
 
     @Override
+    public Object getInfoComponent() {
+        JPanel panel = (JPanel) super.getInfoComponent();
+        String[][] content = getInfoContent();
+        for (String[] entry: content) {
+            panel.add(new JLabel(entry[0] + ':'), GBC.std());
+            panel.add(GBC.glue(5, 0), GBC.std());
+            panel.add(createTextField(entry[1]), GBC.eol().fill(GridBagConstraints.HORIZONTAL));
+        }
+        return panel;
+    }
+
+    @Override
+    public void paint(Graphics2D g, MapView mv, Bounds box) {
+        super.paint(g, mv, box);
+        PMTilesLayer.super.paint(g, mv, box);
+    }
+
+    @Override
     public void visitBoundingBox(BoundingXYVisitor v) {
         super.visitBoundingBox(v);
Index: /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/gui/layers/PMTilesImageSource.java
===================================================================
--- /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/gui/layers/PMTilesImageSource.java	(revision 36218)
+++ /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/gui/layers/PMTilesImageSource.java	(revision 36219)
@@ -2,5 +2,4 @@
 package org.openstreetmap.josm.plugins.pmtiles.gui.layers;
 
-import jakarta.json.JsonObject;
 import org.openstreetmap.gui.jmapviewer.OsmMercator;
 import org.openstreetmap.gui.jmapviewer.tilesources.AbstractTMSTileSource;
@@ -8,10 +7,15 @@
 import org.openstreetmap.josm.plugins.pmtiles.lib.Header;
 
+import jakarta.json.JsonObject;
+
 /**
  * A source for images in PMTiles
  */
 public class PMTilesImageSource extends AbstractTMSTileSource implements PMTilesTileSource {
+    /** The metadata for this source */
     private final JsonObject metadata;
+    /** The PMTiles header */
     private final Header header;
+    /** The {@link OsmMercator} instance for the specified tile size */
     private final OsmMercator osmMercator;
 
Index: /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/gui/layers/PMTilesLayer.java
===================================================================
--- /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/gui/layers/PMTilesLayer.java	(revision 36218)
+++ /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/gui/layers/PMTilesLayer.java	(revision 36219)
@@ -4,5 +4,15 @@
 import static org.openstreetmap.josm.tools.Utils.getSystemProperty;
 
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.Point;
+
+import org.openstreetmap.gui.jmapviewer.interfaces.ICoordinate;
+import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
+import org.openstreetmap.josm.gui.MapView;
+import org.openstreetmap.josm.gui.layer.MapViewPaintable;
 import org.openstreetmap.josm.plugins.pmtiles.data.imagery.PMTilesImageryInfo;
 import org.openstreetmap.josm.tools.TextUtils;
@@ -12,5 +22,5 @@
  * A common interface for layers using PMTiles as a source
  */
-interface PMTilesLayer {
+interface PMTilesLayer extends MapViewPaintable {
 
     /**
@@ -52,4 +62,40 @@
 
     /**
+     * Get info information
+     * @return The information to add to the info panel
+     */
+    default String[][] getInfoContent() {
+        final var info = getInfo();
+        final var content = new String[3][];
+        content[0] = new String[] {"Maximum zoom", String.valueOf(info.getMaxZoom())};
+        content[1] = new String[] {"Minimum zoom", String.valueOf(info.getMinZoom())};
+        content[2] = new String[] {"Bounds", info.getBounds().toBBox().toStringCSV(",")};
+        return content;
+    }
+
+    @Override
+    default void paint(Graphics2D g, MapView mv, Bounds box) {
+        final var info = getInfo();
+        g.setStroke(new BasicStroke());
+        g.setColor(Color.DARK_GRAY);
+        if (info.getBounds().getShapes().isEmpty()) {
+            final var lowerLeft = mv.getPoint(info.getBounds().getMin());
+            final var upperRight = mv.getPoint(info.getBounds().getMax());
+            g.drawRect(lowerLeft.x, upperRight.y, upperRight.x - lowerLeft.x, lowerLeft.y - upperRight.y);
+        } else {
+            for (var shape : info.getBounds().getShapes()) {
+                Point last = null;
+                for (ICoordinate coord : shape.getPoints()) {
+                    final var point = mv.getPoint(new LatLon(coord.getLat(), coord.getLon()));
+                    if (last != null) {
+                        g.drawLine(last.x, last.y, point.x, point.y);
+                    }
+                    last = point;
+                }
+            }
+        }
+    }
+
+    /**
      * Visits the content bounds of this layer. The behavior of this method depends on the layer,
      * but each implementation should attempt to cover the relevant content of the layer in this method.
Index: /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/gui/layers/PMTilesLoader.java
===================================================================
--- /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/gui/layers/PMTilesLoader.java	(revision 36218)
+++ /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/gui/layers/PMTilesLoader.java	(revision 36219)
@@ -25,21 +25,25 @@
  */
 public class PMTilesLoader implements TileLoader {
+    /** The executor for fetching the tiles. */
     private static final ThreadPoolExecutor EXECUTOR = TMSCachedTileLoader.getNewThreadPoolExecutor("pmtiles");
+    /** The current jobs for the loader */
     private final Collection<PMTileJob> jobs = new HashSet<>();
+    /** The cache for downloaded tiles */
     private final ICacheAccess<String, CacheEntry> cache;
+    /** The options for the tile loader */
     private final TileJobOptions options;
-    private final TileLoaderListener listener;
+    /** The PMTiles header */
     private Header header;
+    /** The cache of PMTiles directories */
     private DirectoryCache directoryCache;
 
     /**
      * Create a new tile loader
-     * @param listener The listener to notify
+     * @param ignored The listener to notify
      * @param cache The cache to use
      * @param options The options to use
      */
-    public PMTilesLoader(TileLoaderListener listener, ICacheAccess<String, CacheEntry> cache,
+    public PMTilesLoader(TileLoaderListener ignored, ICacheAccess<String, CacheEntry> cache,
                          TileJobOptions options) {
-        this.listener = listener;
         this.cache = cache;
         this.options = options;
@@ -64,4 +68,8 @@
     }
 
+    /**
+     * Set the PMTiles info for this loader
+     * @param info The info to use
+     */
     void setInfo(PMTilesImageryInfo info) {
         this.header = info.header();
Index: /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/gui/layers/PMTilesMVTLayer.java
===================================================================
--- /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/gui/layers/PMTilesMVTLayer.java	(revision 36218)
+++ /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/gui/layers/PMTilesMVTLayer.java	(revision 36219)
@@ -2,13 +2,21 @@
 package org.openstreetmap.josm.plugins.pmtiles.gui.layers;
 
+import java.awt.Graphics2D;
+import java.awt.GridBagConstraints;
 import java.util.Collection;
 import java.util.Collections;
 
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
 import org.openstreetmap.gui.jmapviewer.interfaces.TileLoader;
+import org.openstreetmap.josm.data.Bounds;
 import org.openstreetmap.josm.data.imagery.vectortile.mapbox.MVTFile;
 import org.openstreetmap.josm.data.imagery.vectortile.mapbox.MapboxVectorTileSource;
 import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
+import org.openstreetmap.josm.gui.MapView;
 import org.openstreetmap.josm.gui.layer.imagery.MVTLayer;
 import org.openstreetmap.josm.plugins.pmtiles.data.imagery.PMTilesImageryInfo;
+import org.openstreetmap.josm.tools.GBC;
 
 /**
@@ -73,4 +81,22 @@
 
     @Override
+    public Object getInfoComponent() {
+        JPanel panel = (JPanel) super.getInfoComponent();
+        String[][] content = getInfoContent();
+        for (String[] entry: content) {
+            panel.add(new JLabel(entry[0] + ':'), GBC.std());
+            panel.add(GBC.glue(5, 0), GBC.std());
+            panel.add(createTextField(entry[1]), GBC.eol().fill(GridBagConstraints.HORIZONTAL));
+        }
+        return panel;
+    }
+
+    @Override
+    public void paint(Graphics2D g, MapView mv, Bounds box) {
+        super.paint(g, mv, box);
+        PMTilesLayer.super.paint(g, mv, box);
+    }
+
+    @Override
     public void visitBoundingBox(BoundingXYVisitor v) {
         super.visitBoundingBox(v);
Index: /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/gui/layers/PMTilesMVTTileSource.java
===================================================================
--- /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/gui/layers/PMTilesMVTTileSource.java	(revision 36218)
+++ /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/gui/layers/PMTilesMVTTileSource.java	(revision 36219)
@@ -1,8 +1,4 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.plugins.pmtiles.gui.layers;
-
-import jakarta.json.Json;
-import jakarta.json.JsonObject;
-import jakarta.json.JsonValue;
 
 import org.openstreetmap.gui.jmapviewer.OsmMercator;
@@ -12,10 +8,17 @@
 import org.openstreetmap.josm.plugins.pmtiles.lib.Header;
 
+import jakarta.json.Json;
+import jakarta.json.JsonObject;
+import jakarta.json.JsonValue;
+
 /**
  * The tile source for MVT tiles in PMTiles
  */
 public class PMTilesMVTTileSource extends MapboxVectorTileSource implements PMTilesTileSource {
+    /** The metadata for the source */
     private final JsonObject metadata;
+    /** The PMTiles header information */
     private final Header header;
+    /** The style source for the vector tiles */
     private final MapboxVectorStyle styleSource;
 
Index: /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/gui/layers/package-info.java
===================================================================
--- /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/gui/layers/package-info.java	(revision 36219)
+++ /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/gui/layers/package-info.java	(revision 36219)
@@ -0,0 +1,5 @@
+// License: GPL. For details, see LICENSE file.
+/**
+ * Classes for showing PMTiles as a layer in JOSM
+ */
+package org.openstreetmap.josm.plugins.pmtiles.gui.layers;
Index: /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/lib/DirectoryCache.java
===================================================================
--- /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/lib/DirectoryCache.java	(revision 36218)
+++ /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/lib/DirectoryCache.java	(revision 36219)
@@ -10,4 +10,5 @@
  */
 public final class DirectoryCache implements Iterable<Directory> {
+    /** The cached directories; [0] is the root, [1] is the last read directory */
     private final Directory[] directories = new Directory[2];
     /**
Index: /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/lib/DirectoryEntry.java
===================================================================
--- /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/lib/DirectoryEntry.java	(revision 36218)
+++ /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/lib/DirectoryEntry.java	(revision 36219)
@@ -12,4 +12,5 @@
  */
 public record DirectoryEntry(long tileId, long offset, long length, long runLength) implements Serializable {
+    /** Create a new entry with some basic validation */
     public DirectoryEntry {
         if (length <= 0) {
Index: /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/lib/InternalCompression.java
===================================================================
--- /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/lib/InternalCompression.java	(revision 36218)
+++ /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/lib/InternalCompression.java	(revision 36219)
@@ -6,8 +6,13 @@
  */
 public enum InternalCompression {
+    /** Unknown compression type */
     UNKNOWN,
+    /** No compression */
     NONE,
+    /** The GNU GZIP compression format */
     GZIP,
+    /** The Google Brotli compression format */
     BROTLI,
+    /** The Facebook zstandard compression format */
     ZSTD
 }
Index: /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/lib/PMTiles.java
===================================================================
--- /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/lib/PMTiles.java	(revision 36218)
+++ /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/lib/PMTiles.java	(revision 36219)
@@ -27,6 +27,8 @@
  */
 public final class PMTiles {
+    /** An empty byte array for reuse */
     private static final byte[] EMPTY_BYTE = new byte[0];
 
+    /** The constructor for this class. Hidden, so we don't have instances of this class. */
     private PMTiles() {/* hide the constructor */}
 
@@ -180,5 +182,5 @@
         }
         // We need to sum up the previous z levels
-        var start = 0;
+        long start = 0L;
         var currentZoom = z;
         // TODO profile this and the integral form (4^x)/(log(4)). Might not be as accurate though due to fp issues.
@@ -186,14 +188,14 @@
         while (currentZoom > 0) {
             currentZoom--;
-            start += (1 << currentZoom) * (1 << currentZoom);
+            start += (1L << currentZoom) * (1L << currentZoom);
         }
         // Now we need to calculate the coordinates inside the specified zoom level
         long d = 0;
-        var n = 1 << z;
+        int n = 1 << z;
         final var xy = new int[]{x, y};
-        for (var s = n / 2; s > 0; s /= 2) {
-            var rx = (xy[0] & s) > 0 ? 1 : 0;
-            var ry = (xy[1] & s) > 0 ? 1 : 0;
-            d += s * s * ((3 * rx) ^ ry);
+        for (int s = n / 2; s > 0; s /= 2) {
+            int rx = (xy[0] & s) > 0 ? 1 : 0;
+            int ry = (xy[1] & s) > 0 ? 1 : 0;
+            d += ((long) s) * s * ((3 * rx) ^ ry);
             rotate(n, xy, rx, ry);
         }
@@ -210,5 +212,5 @@
         var start = 0;
         while (true) {
-            final var zTiles = Math.pow(4, z);
+            final var zTiles = Math.toIntExact(Math.round(Math.pow(4, z)));
             if (start + zTiles > hilbert) {
                 break;
@@ -250,4 +252,11 @@
     }
 
+    /**
+     * Decompress a stream
+     * @param compression The compression the stream uses
+     * @param inputStream The stream to decompress
+     * @return The decompressed stream
+     * @throws IOException if one of the decompressors had an issue
+     */
     private static InputStream decompressInputStream(InternalCompression compression, InputStream inputStream) throws IOException {
         return switch (compression) {
@@ -260,4 +269,12 @@
     }
 
+    /**
+     * Get the stream for a given range and location
+     * @param location The location of the data
+     * @param start The start byte
+     * @param length The end byte (exclusive)
+     * @return The stream to read for the data
+     * @throws IOException If there is something that prevents reading the stream from the given location.
+     */
     private static InputStream getInputStream(URI location, long start, long length) throws IOException {
         if (Utils.isLocalUrl(location.toString())) {
Index: /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/lib/TileType.java
===================================================================
--- /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/lib/TileType.java	(revision 36218)
+++ /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/lib/TileType.java	(revision 36219)
@@ -6,9 +6,15 @@
  */
 public enum TileType {
+    /** Unknown tile type */
     UNKNOWN,
+    /** Mapbox Vector Tiles */
     MVT,
+    /** Portable Network Graphics */
     PNG,
+    /** Joint Photographic Experts Group */
     JPEG,
+    /** Google's WebP format */
     WEBP,
+    /** AV1 Image File Format */
     AVIF
 }
Index: /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/lib/internal/DirectoryParser.java
===================================================================
--- /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/lib/internal/DirectoryParser.java	(revision 36218)
+++ /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/lib/internal/DirectoryParser.java	(revision 36219)
@@ -12,6 +12,13 @@
  */
 public final class DirectoryParser {
+    /** Hide the constructor */
     private DirectoryParser() { /* Hide the constructor */ }
 
+    /**
+     * Parse a directory
+     * @param inputStream The stream to read
+     * @return The parsed directory
+     * @throws IOException See {@link InputStream#read()}
+     */
     public static Directory parse(InputStream inputStream) throws IOException {
         int lastByte = inputStream.read();
Index: /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/lib/internal/HeaderParser.java
===================================================================
--- /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/lib/internal/HeaderParser.java	(revision 36218)
+++ /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/lib/internal/HeaderParser.java	(revision 36219)
@@ -14,4 +14,5 @@
  */
 public final class HeaderParser {
+    /** Hide the constructor */
     private HeaderParser() { /* Hide constructor */ }
 
@@ -47,12 +48,30 @@
     }
 
+    /**
+     * Read the next degrees from a stream
+     * @param inputStream The stream to read
+     * @return The degrees read
+     * @throws IOException See {@link InputStream#read()}
+     */
     private static double nextDegrees(InputStream inputStream) throws IOException {
         return Util.nextInt(inputStream, 4) / 10_000_000d;
     }
 
+    /**
+     * Get the next int
+     * @param inputStream The stream to read
+     * @return The next (unsigned) int
+     * @throws IOException See {@link InputStream#read()}
+     */
     private static long nextInt(InputStream inputStream) throws IOException {
         return Util.nextInt(inputStream, 8);
     }
 
+    /**
+     * Get the next compression type
+     * @param inputStream The stream to read
+     * @return The compression type
+     * @throws IOException See {@link InputStream#read()}
+     */
     private static InternalCompression nextCompressionType(InputStream inputStream) throws IOException {
         final var type = inputStream.read();
@@ -67,4 +86,10 @@
     }
 
+    /**
+     * Get the tile type for the next tile
+     * @param inputStream The stream to read
+     * @return The tile type
+     * @throws IOException See {@link InputStream#read()}
+     */
     private static TileType nextTileType(InputStream inputStream) throws IOException {
         final var type = inputStream.read();
Index: /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/lib/internal/Util.java
===================================================================
--- /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/lib/internal/Util.java	(revision 36218)
+++ /applications/editors/josm/plugins/pmtiles/src/main/java/org/openstreetmap/josm/plugins/pmtiles/lib/internal/Util.java	(revision 36219)
@@ -11,4 +11,5 @@
  */
 final class Util {
+    /** The private constructor to avoid instantiation */
     private Util() {/* Hide constructor */}
 
