diff --git a/planetiler-core/pom.xml b/planetiler-core/pom.xml
index 56ae13d1..63d393b6 100644
--- a/planetiler-core/pom.xml
+++ b/planetiler-core/pom.xml
@@ -157,7 +157,7 @@
com.google.guava
guava
- 33.4.0-jre
+ 33.4.6-jre
mil.nga.geopackage
@@ -186,6 +186,11 @@
lz4-java
1.8.0
+
+ net.jcip
+ jcip-annotations
+ 1.0
+
diff --git a/planetiler-core/src/main/java/com/onthegomap/planetiler/VectorTile.java b/planetiler-core/src/main/java/com/onthegomap/planetiler/VectorTile.java
index b200e27a..f4147a8b 100644
--- a/planetiler-core/src/main/java/com/onthegomap/planetiler/VectorTile.java
+++ b/planetiler-core/src/main/java/com/onthegomap/planetiler/VectorTile.java
@@ -40,7 +40,7 @@ import java.util.TreeMap;
import java.util.function.Consumer;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import javax.annotation.concurrent.NotThreadSafe;
+import net.jcip.annotations.NotThreadSafe;
import org.locationtech.jts.algorithm.Orientation;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.CoordinateSequence;
diff --git a/planetiler-core/src/main/java/com/onthegomap/planetiler/archive/TileEncodingResult.java b/planetiler-core/src/main/java/com/onthegomap/planetiler/archive/TileEncodingResult.java
index 8716c214..ecbd8fb3 100644
--- a/planetiler-core/src/main/java/com/onthegomap/planetiler/archive/TileEncodingResult.java
+++ b/planetiler-core/src/main/java/com/onthegomap/planetiler/archive/TileEncodingResult.java
@@ -5,11 +5,10 @@ import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.OptionalLong;
-import javax.annotation.Nonnull;
public record TileEncodingResult(
TileCoord coord,
- @Nonnull byte[] tileData,
+ byte[] tileData,
int rawTileSize,
/* will always be empty in non-compact mode and might also be empty in compact mode */
OptionalLong tileDataHash,
diff --git a/planetiler-core/src/main/java/com/onthegomap/planetiler/archive/WriteableTileArchive.java b/planetiler-core/src/main/java/com/onthegomap/planetiler/archive/WriteableTileArchive.java
index d6dca491..ec1b467f 100644
--- a/planetiler-core/src/main/java/com/onthegomap/planetiler/archive/WriteableTileArchive.java
+++ b/planetiler-core/src/main/java/com/onthegomap/planetiler/archive/WriteableTileArchive.java
@@ -3,7 +3,7 @@ package com.onthegomap.planetiler.archive;
import com.onthegomap.planetiler.config.PlanetilerConfig;
import com.onthegomap.planetiler.geo.TileOrder;
import java.io.Closeable;
-import javax.annotation.concurrent.NotThreadSafe;
+import net.jcip.annotations.NotThreadSafe;
/**
* Write API for an on-disk representation of a tileset in a portable format. Example: MBTiles, a sqlite-based archive
diff --git a/planetiler-core/src/main/java/com/onthegomap/planetiler/collection/ExternalMergeSort.java b/planetiler-core/src/main/java/com/onthegomap/planetiler/collection/ExternalMergeSort.java
index 0f58edd8..734d46cf 100644
--- a/planetiler-core/src/main/java/com/onthegomap/planetiler/collection/ExternalMergeSort.java
+++ b/planetiler-core/src/main/java/com/onthegomap/planetiler/collection/ExternalMergeSort.java
@@ -41,7 +41,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
import java.util.function.Supplier;
-import javax.annotation.concurrent.NotThreadSafe;
+import net.jcip.annotations.NotThreadSafe;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.xerial.snappy.SnappyInputStream;
diff --git a/planetiler-core/src/main/java/com/onthegomap/planetiler/collection/FeatureGroup.java b/planetiler-core/src/main/java/com/onthegomap/planetiler/collection/FeatureGroup.java
index 51404062..6e5f62e9 100644
--- a/planetiler-core/src/main/java/com/onthegomap/planetiler/collection/FeatureGroup.java
+++ b/planetiler-core/src/main/java/com/onthegomap/planetiler/collection/FeatureGroup.java
@@ -31,7 +31,7 @@ import java.util.Objects;
import java.util.TreeMap;
import java.util.concurrent.atomic.AtomicLong;
import java.util.function.Function;
-import javax.annotation.concurrent.NotThreadSafe;
+import net.jcip.annotations.NotThreadSafe;
import org.msgpack.core.MessageBufferPacker;
import org.msgpack.core.MessagePack;
import org.msgpack.core.MessageUnpacker;
diff --git a/planetiler-core/src/main/java/com/onthegomap/planetiler/collection/FeatureSort.java b/planetiler-core/src/main/java/com/onthegomap/planetiler/collection/FeatureSort.java
index ce2028d1..c8388a53 100644
--- a/planetiler-core/src/main/java/com/onthegomap/planetiler/collection/FeatureSort.java
+++ b/planetiler-core/src/main/java/com/onthegomap/planetiler/collection/FeatureSort.java
@@ -12,7 +12,7 @@ import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.stream.IntStream;
-import javax.annotation.concurrent.NotThreadSafe;
+import net.jcip.annotations.NotThreadSafe;
/**
* A utility that accepts {@link SortableFeature} instances in any order and lets you iterate through them ordered by
diff --git a/planetiler-core/src/main/java/com/onthegomap/planetiler/collection/IntRangeSet.java b/planetiler-core/src/main/java/com/onthegomap/planetiler/collection/IntRangeSet.java
index 3ac54431..00c7f675 100644
--- a/planetiler-core/src/main/java/com/onthegomap/planetiler/collection/IntRangeSet.java
+++ b/planetiler-core/src/main/java/com/onthegomap/planetiler/collection/IntRangeSet.java
@@ -1,7 +1,7 @@
package com.onthegomap.planetiler.collection;
import java.util.PrimitiveIterator;
-import javax.annotation.concurrent.NotThreadSafe;
+import net.jcip.annotations.NotThreadSafe;
import org.roaringbitmap.PeekableIntIterator;
import org.roaringbitmap.RoaringBitmap;
diff --git a/planetiler-core/src/main/java/com/onthegomap/planetiler/geo/PointIndex.java b/planetiler-core/src/main/java/com/onthegomap/planetiler/geo/PointIndex.java
index 888d4b3e..298e86ef 100644
--- a/planetiler-core/src/main/java/com/onthegomap/planetiler/geo/PointIndex.java
+++ b/planetiler-core/src/main/java/com/onthegomap/planetiler/geo/PointIndex.java
@@ -3,7 +3,7 @@ package com.onthegomap.planetiler.geo;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
-import javax.annotation.concurrent.ThreadSafe;
+import net.jcip.annotations.ThreadSafe;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.Envelope;
import org.locationtech.jts.geom.Geometry;
@@ -21,7 +21,7 @@ import org.locationtech.jts.index.strtree.STRtree;
@ThreadSafe
public class PointIndex {
- private record GeomWithData (Coordinate coord, T data) {}
+ private record GeomWithData(Coordinate coord, T data) {}
private final STRtree index = new STRtree();
diff --git a/planetiler-core/src/main/java/com/onthegomap/planetiler/geo/PolygonIndex.java b/planetiler-core/src/main/java/com/onthegomap/planetiler/geo/PolygonIndex.java
index 1742d3e3..d0424616 100644
--- a/planetiler-core/src/main/java/com/onthegomap/planetiler/geo/PolygonIndex.java
+++ b/planetiler-core/src/main/java/com/onthegomap/planetiler/geo/PolygonIndex.java
@@ -2,7 +2,7 @@ package com.onthegomap.planetiler.geo;
import java.util.ArrayList;
import java.util.List;
-import javax.annotation.concurrent.ThreadSafe;
+import net.jcip.annotations.ThreadSafe;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.geom.GeometryCollection;
import org.locationtech.jts.geom.Point;
@@ -67,7 +67,7 @@ public class PolygonIndex {
private List postFilterContaining(Point point, List> items) {
List result = new ArrayList<>(items.size());
for (Object item : items) {
- if (item instanceof GeomWithData>(var poly,var data) && poly.contains(point)) {
+ if (item instanceof GeomWithData>(var poly, var data) && poly.contains(point)) {
@SuppressWarnings("unchecked") T t = (T) data;
result.add(t);
}
@@ -78,7 +78,7 @@ public class PolygonIndex {
private List postFilterIntersecting(Geometry geom, List> items) {
List result = new ArrayList<>(items.size());
for (Object item : items) {
- if (item instanceof GeomWithData>(var poly,var data) && poly.intersects(geom)) {
+ if (item instanceof GeomWithData>(var poly, var data) && poly.intersects(geom)) {
@SuppressWarnings("unchecked") T t = (T) data;
result.add(t);
}
diff --git a/planetiler-core/src/main/java/com/onthegomap/planetiler/geo/TileCoord.java b/planetiler-core/src/main/java/com/onthegomap/planetiler/geo/TileCoord.java
index 6d6370a7..eda0144b 100644
--- a/planetiler-core/src/main/java/com/onthegomap/planetiler/geo/TileCoord.java
+++ b/planetiler-core/src/main/java/com/onthegomap/planetiler/geo/TileCoord.java
@@ -6,7 +6,7 @@ import com.onthegomap.planetiler.util.Hilbert;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Locale;
-import javax.annotation.concurrent.Immutable;
+import net.jcip.annotations.Immutable;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.CoordinateXY;
import org.locationtech.jts.geom.Envelope;
diff --git a/planetiler-core/src/main/java/com/onthegomap/planetiler/render/TiledGeometry.java b/planetiler-core/src/main/java/com/onthegomap/planetiler/render/TiledGeometry.java
index 03ffbfc9..74469719 100644
--- a/planetiler-core/src/main/java/com/onthegomap/planetiler/render/TiledGeometry.java
+++ b/planetiler-core/src/main/java/com/onthegomap/planetiler/render/TiledGeometry.java
@@ -38,7 +38,7 @@ import java.util.List;
import java.util.Map;
import java.util.TreeSet;
import java.util.stream.Stream;
-import javax.annotation.concurrent.NotThreadSafe;
+import net.jcip.annotations.NotThreadSafe;
import org.locationtech.jts.geom.Coordinate;
import org.locationtech.jts.geom.CoordinateSequence;
import org.locationtech.jts.geom.Geometry;
diff --git a/planetiler-core/src/main/java/com/onthegomap/planetiler/stats/ProcessTime.java b/planetiler-core/src/main/java/com/onthegomap/planetiler/stats/ProcessTime.java
index 7e8cb0b6..7848c744 100644
--- a/planetiler-core/src/main/java/com/onthegomap/planetiler/stats/ProcessTime.java
+++ b/planetiler-core/src/main/java/com/onthegomap/planetiler/stats/ProcessTime.java
@@ -4,7 +4,7 @@ import com.onthegomap.planetiler.util.Format;
import java.time.Duration;
import java.util.Locale;
import java.util.Optional;
-import javax.annotation.concurrent.Immutable;
+import net.jcip.annotations.Immutable;
/**
* A utility for measuring the wall and CPU time that this JVM consumes between snapshots.
diff --git a/planetiler-core/src/main/java/com/onthegomap/planetiler/stats/Timer.java b/planetiler-core/src/main/java/com/onthegomap/planetiler/stats/Timer.java
index 83ba537b..8ac1c938 100644
--- a/planetiler-core/src/main/java/com/onthegomap/planetiler/stats/Timer.java
+++ b/planetiler-core/src/main/java/com/onthegomap/planetiler/stats/Timer.java
@@ -1,6 +1,6 @@
package com.onthegomap.planetiler.stats;
-import javax.annotation.concurrent.ThreadSafe;
+import net.jcip.annotations.ThreadSafe;
/**
* Measures the amount of wall and CPU time that a task takes.
diff --git a/planetiler-core/src/main/java/com/onthegomap/planetiler/stats/Timers.java b/planetiler-core/src/main/java/com/onthegomap/planetiler/stats/Timers.java
index 8e22e727..b42eaae6 100644
--- a/planetiler-core/src/main/java/com/onthegomap/planetiler/stats/Timers.java
+++ b/planetiler-core/src/main/java/com/onthegomap/planetiler/stats/Timers.java
@@ -9,7 +9,7 @@ import java.util.List;
import java.util.Map;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.atomic.AtomicReference;
-import javax.annotation.concurrent.ThreadSafe;
+import net.jcip.annotations.ThreadSafe;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/planetiler-core/src/main/java/com/onthegomap/planetiler/util/AwsOsm.java b/planetiler-core/src/main/java/com/onthegomap/planetiler/util/AwsOsm.java
index cdd3a818..b1f02d71 100644
--- a/planetiler-core/src/main/java/com/onthegomap/planetiler/util/AwsOsm.java
+++ b/planetiler-core/src/main/java/com/onthegomap/planetiler/util/AwsOsm.java
@@ -15,7 +15,7 @@ import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
-import javax.annotation.concurrent.Immutable;
+import net.jcip.annotations.Immutable;
/**
* A utility to download {@code planet.osm.pbf} files from public S3 sources such as
diff --git a/planetiler-core/src/main/java/com/onthegomap/planetiler/util/CommonStringEncoder.java b/planetiler-core/src/main/java/com/onthegomap/planetiler/util/CommonStringEncoder.java
index 783e77ad..b60a9d5a 100644
--- a/planetiler-core/src/main/java/com/onthegomap/planetiler/util/CommonStringEncoder.java
+++ b/planetiler-core/src/main/java/com/onthegomap/planetiler/util/CommonStringEncoder.java
@@ -3,7 +3,7 @@ package com.onthegomap.planetiler.util;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
-import javax.annotation.concurrent.ThreadSafe;
+import net.jcip.annotations.ThreadSafe;
/**
* A utility for compressing commonly-used strings (i.e. layer name, tag attributes).
diff --git a/planetiler-core/src/main/java/com/onthegomap/planetiler/util/Geofabrik.java b/planetiler-core/src/main/java/com/onthegomap/planetiler/util/Geofabrik.java
index 07e514ad..44585f09 100644
--- a/planetiler-core/src/main/java/com/onthegomap/planetiler/util/Geofabrik.java
+++ b/planetiler-core/src/main/java/com/onthegomap/planetiler/util/Geofabrik.java
@@ -13,8 +13,8 @@ import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import javax.annotation.concurrent.Immutable;
-import javax.annotation.concurrent.ThreadSafe;
+import net.jcip.annotations.Immutable;
+import net.jcip.annotations.ThreadSafe;
/**
* A utility to search Geofabrik Download Server for a {@code .osm.pbf}
diff --git a/planetiler-core/src/main/java/com/onthegomap/planetiler/util/LayerAttrStats.java b/planetiler-core/src/main/java/com/onthegomap/planetiler/util/LayerAttrStats.java
index c068c21e..0e06cadf 100644
--- a/planetiler-core/src/main/java/com/onthegomap/planetiler/util/LayerAttrStats.java
+++ b/planetiler-core/src/main/java/com/onthegomap/planetiler/util/LayerAttrStats.java
@@ -8,8 +8,7 @@ import java.util.Optional;
import java.util.OptionalInt;
import java.util.TreeMap;
import java.util.concurrent.CopyOnWriteArrayList;
-import javax.annotation.concurrent.NotThreadSafe;
-import javax.annotation.concurrent.ThreadSafe;
+import net.jcip.annotations.ThreadSafe;
/**
* Tracks the feature attributes and zoom range of each layer to populate the archive output metadata.
@@ -110,7 +109,7 @@ public class LayerAttrStats {
}
/** Accepts features from a single thread that will be combined across all threads in {@link #getTileStats()}. */
- @NotThreadSafe
+ @ThreadSafe
private class ThreadLocalHandler implements Updater {
private final Map layers = new TreeMap<>();
diff --git a/planetiler-core/src/main/java/com/onthegomap/planetiler/util/ResourceUsage.java b/planetiler-core/src/main/java/com/onthegomap/planetiler/util/ResourceUsage.java
index 1cc3fa03..d24e8dbd 100644
--- a/planetiler-core/src/main/java/com/onthegomap/planetiler/util/ResourceUsage.java
+++ b/planetiler-core/src/main/java/com/onthegomap/planetiler/util/ResourceUsage.java
@@ -11,7 +11,7 @@ import java.util.OptionalLong;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.function.Supplier;
import java.util.stream.Collectors;
-import javax.annotation.concurrent.ThreadSafe;
+import net.jcip.annotations.ThreadSafe;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/planetiler-core/src/main/java/com/onthegomap/planetiler/util/SeekableInMemoryByteChannel.java b/planetiler-core/src/main/java/com/onthegomap/planetiler/util/SeekableInMemoryByteChannel.java
index 732b0098..700bf864 100644
--- a/planetiler-core/src/main/java/com/onthegomap/planetiler/util/SeekableInMemoryByteChannel.java
+++ b/planetiler-core/src/main/java/com/onthegomap/planetiler/util/SeekableInMemoryByteChannel.java
@@ -24,7 +24,7 @@ import java.nio.channels.ClosedChannelException;
import java.nio.channels.SeekableByteChannel;
import java.util.Arrays;
import java.util.concurrent.atomic.AtomicBoolean;
-import javax.annotation.concurrent.NotThreadSafe;
+import net.jcip.annotations.NotThreadSafe;
/**
* A {@link SeekableByteChannel} implementation that wraps a byte[].
diff --git a/planetiler-core/src/main/java/com/onthegomap/planetiler/worker/Distributor.java b/planetiler-core/src/main/java/com/onthegomap/planetiler/worker/Distributor.java
index 4936534e..e5a49f06 100644
--- a/planetiler-core/src/main/java/com/onthegomap/planetiler/worker/Distributor.java
+++ b/planetiler-core/src/main/java/com/onthegomap/planetiler/worker/Distributor.java
@@ -4,8 +4,8 @@ import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Consumer;
-import javax.annotation.concurrent.NotThreadSafe;
-import javax.annotation.concurrent.ThreadSafe;
+import net.jcip.annotations.NotThreadSafe;
+import net.jcip.annotations.ThreadSafe;
/**
* Redistributes work among worker threads when some finish early.