Index: /trunk/ivy.xml
===================================================================
--- /trunk/ivy.xml	(revision 18925)
+++ /trunk/ivy.xml	(revision 18926)
@@ -21,5 +21,5 @@
     <dependencies>
         <!-- api->default -->
-        <dependency conf="api->default" org="org.openstreetmap.jmapviewer" name="jmapviewer" rev="2.18"/>
+        <dependency conf="api->default" org="org.openstreetmap.jmapviewer" name="jmapviewer" rev="2.19"/>
         <!-- The javax json dependencies should be removed sometime in 2024 -->
         <dependency conf="api->default" org="javax.json" name="javax.json-api" rev="1.1.4"/>
@@ -37,10 +37,10 @@
         <dependency conf="api->default" org="com.drewnoakes" name="metadata-extractor" rev="2.19.0" transitive="false"/>
         <dependency conf="api->default" org="com.formdev" name="svgSalamander" rev="1.1.4"/>
-        <dependency conf="api->default" org="ch.poole" name="OpeningHoursParser" rev="0.27.1"/>
+        <dependency conf="api->default" org="ch.poole" name="OpeningHoursParser" rev="0.28.0"/>
         <dependency conf="api->default" org="oauth.signpost" name="signpost-core" rev="2.1.1"/>
         <!-- Don't forget to update org.openstreetmap.josm.tools.Tag2Link#PREF_SOURCE -->
         <dependency conf="api->default" org="org.webjars.npm" name="tag2link" rev="2023.11.21"/>
         <!-- sources->sources -->
-        <dependency conf="sources->sources" org="org.openstreetmap.jmapviewer" name="jmapviewer" rev="2.18"/>
+        <dependency conf="sources->sources" org="org.openstreetmap.jmapviewer" name="jmapviewer" rev="2.19"/>
         <dependency conf="sources->sources" org="javax.json" name="javax.json-api" rev="1.1.4"/>
         <dependency conf="sources->sources" org="org.glassfish" name="javax.json" rev="1.1.4"/>
@@ -56,5 +56,5 @@
         <dependency conf="sources->sources" org="com.drewnoakes" name="metadata-extractor" rev="2.19.0" transitive="false"/>
         <dependency conf="sources->sources" org="com.formdev" name="svgSalamander" rev="1.1.4"/>
-        <dependency conf="sources->sources" org="ch.poole" name="OpeningHoursParser" rev="0.27.1"/>
+        <dependency conf="sources->sources" org="ch.poole" name="OpeningHoursParser" rev="0.28.0"/>
         <dependency conf="sources->sources" org="oauth.signpost" name="signpost-core" rev="2.1.1"/>
         <dependency conf="sources->default" org="org.webjars.npm" name="tag2link" rev="2023.11.21"/><!-- sources->default sic! (tag2link-sources.jar is empty, see #19335) -->
@@ -79,5 +79,5 @@
         <dependency conf="test->default" org="org.junit.jupiter" name="junit-jupiter-migrationsupport" rev="5.10.1"/>
         <dependency conf="test->default" org="net.trajano.commons" name="commons-testing" rev="2.1.0"/>
-        <dependency conf="test->default" org="nl.jqno.equalsverifier" name="equalsverifier" rev="3.15.4"/>
+        <dependency conf="test->default" org="nl.jqno.equalsverifier" name="equalsverifier" rev="3.15.5"/>
         <dependency conf="test->default" org="org.apache.commons" name="commons-lang3" rev="3.14.0"/>
         <dependency conf="test->default" org="org.awaitility" name="awaitility" rev="4.2.0"/>
Index: /trunk/ivysettings.xml
===================================================================
--- /trunk/ivysettings.xml	(revision 18925)
+++ /trunk/ivysettings.xml	(revision 18926)
@@ -8,4 +8,4 @@
   <!-- Remove error_prone 2.10.0 specific statements in build.xml when we drop Java 8 as a build platform -->
   <property name="versions.error_prone" value="2.10.0" unlessset="isJava11"/>
-  <property name="versions.error_prone" value="2.23.0" ifset="isJava11"/>
+  <property name="versions.error_prone" value="2.24.0" ifset="isJava11"/>
 </ivysettings>
Index: /trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java
===================================================================
--- /trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java	(revision 18925)
+++ /trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java	(revision 18926)
@@ -2,4 +2,5 @@
 package org.openstreetmap.josm.gui.layer;
 
+import static org.openstreetmap.josm.tools.I18n.marktr;
 import static org.openstreetmap.josm.tools.I18n.tr;
 
@@ -10,4 +11,5 @@
 import java.awt.Graphics;
 import java.awt.Graphics2D;
+import java.awt.GridBagConstraints;
 import java.awt.GridBagLayout;
 import java.awt.Image;
@@ -179,4 +181,5 @@
 
     private static final BooleanProperty POPUP_MENU_ENABLED = new BooleanProperty(PREFERENCE_PREFIX + ".popupmenu", true);
+    private static final String ERROR_STRING = marktr("Error");
 
     /*
@@ -343,5 +346,5 @@
             panel.add(new JLabel(entry.get(0) + ':'), GBC.std());
             panel.add(GBC.glue(5, 0), GBC.std());
-            panel.add(createTextField(entry.get(1)), GBC.eol().fill(GBC.HORIZONTAL));
+            panel.add(createTextField(entry.get(1)), GBC.eol().fill(GridBagConstraints.HORIZONTAL));
         }
         return panel;
@@ -469,9 +472,9 @@
                 content.add(Arrays.asList(tr("Loaded"), tr(Boolean.toString(tile.isLoaded()))));
                 content.add(Arrays.asList(tr("Loading"), tr(Boolean.toString(tile.isLoading()))));
-                content.add(Arrays.asList(tr("Error"), tr(Boolean.toString(tile.hasError()))));
+                content.add(Arrays.asList(tr(ERROR_STRING), tr(Boolean.toString(tile.hasError()))));
                 for (List<String> entry: content) {
                     panel.add(new JLabel(entry.get(0) + ':'), GBC.std());
                     panel.add(GBC.glue(5, 0), GBC.std());
-                    panel.add(layer.createTextField(entry.get(1)), GBC.eol().fill(GBC.HORIZONTAL));
+                    panel.add(layer.createTextField(entry.get(1)), GBC.eol().fill(GridBagConstraints.HORIZONTAL));
                 }
 
@@ -483,5 +486,5 @@
                         value = Instant.ofEpochMilli(Long.parseLong(value)).toString();
                     }
-                    panel.add(layer.createTextField(value), GBC.eol().fill(GBC.HORIZONTAL));
+                    panel.add(layer.createTextField(value), GBC.eol().fill(GridBagConstraints.HORIZONTAL));
 
                 }
@@ -559,5 +562,5 @@
 
         event.getMapView().addMouseListener(adapter);
-        MapView.addZoomChangeListener(this);
+        NavigatableComponent.addZoomChangeListener(this);
 
         if (this instanceof NativeScaleLayer && Boolean.TRUE.equals(NavigatableComponent.PROP_ZOOM_SCALE_FOLLOW_NATIVE_RES_AT_LOAD.get())) {
@@ -1206,6 +1209,6 @@
                     Logging.debug(e);
                 }
-                if (!errorMessage.startsWith("Error") && !errorMessage.startsWith(tr("Error"))) {
-                    errorMessage = tr("Error") + ": " + errorMessage;
+                if (!errorMessage.startsWith(ERROR_STRING) && !errorMessage.startsWith(tr(ERROR_STRING))) {
+                    errorMessage = tr(ERROR_STRING) + ": " + errorMessage;
                 }
                 myDrawString(g, errorMessage, x + 2, texty);
@@ -1264,5 +1267,10 @@
 
         private boolean tooLarge() {
-            return tileCache == null || size() > tileCache.getCacheSize();
+            try {
+                return tileCache == null || size() > tileCache.getCacheSize();
+            } catch (ArithmeticException arithmeticException) {
+                Logging.trace(arithmeticException);
+                return true;
+            }
         }
 
@@ -1424,5 +1432,10 @@
                         List<Tile> allTiles = this.allExistingTiles();
                         TileSetInfo newInfo = new TileSetInfo();
-                        newInfo.hasLoadingTiles = allTiles.size() < this.size();
+                        try {
+                            newInfo.hasLoadingTiles = allTiles.size() < this.size();
+                        } catch (ArithmeticException arithmeticException) {
+                            Logging.trace(arithmeticException);
+                            newInfo.hasLoadingTiles = false;
+                        }
                         newInfo.hasAllLoadedTiles = true;
                         for (Tile t : allTiles) {
@@ -1450,5 +1463,16 @@
         @Override
         public String toString() {
-            return getClass().getName() + ": zoom: " + zoom + " X(" + minX + ", " + maxX + ") Y(" + minY + ", " + maxY + ") size: " + size();
+            int size;
+            try {
+                size = size();
+            } catch (ArithmeticException arithmeticException) {
+                Logging.trace(arithmeticException);
+                size = Integer.MIN_VALUE;
+            }
+            return getClass().getName()
+                    + ": zoom: " + zoom
+                    + " X(" + minX + ", " + maxX
+                    + ") Y(" + minY + ", " + maxY
+                    + ") size: " + (size >= 0 ? size : "Integer Overflow");
         }
     }
@@ -1473,5 +1497,6 @@
         if (zoom == 0)
             return new TileSet();
-        TileXY t1, t2;
+        TileXY t1;
+        TileXY t2;
         IProjected topLeftUnshifted = coordinateConverter.shiftDisplayToServer(bounds.getMin());
         IProjected botRightUnshifted = coordinateConverter.shiftDisplayToServer(bounds.getMax());
@@ -1496,5 +1521,6 @@
     private class DeepTileSet {
         private final ProjectionBounds bounds;
-        private final int minZoom, maxZoom;
+        private final int minZoom;
+        private final int maxZoom;
         private final TileSet[] tileSets;
 
@@ -1993,5 +2019,5 @@
     public synchronized void destroy() {
         super.destroy();
-        MapView.removeZoomChangeListener(this);
+        NavigatableComponent.removeZoomChangeListener(this);
         adjustAction.destroy();
         if (tileLoader instanceof TMSCachedTileLoader) {
@@ -2053,5 +2079,5 @@
         public void detachFromMapView(MapViewEvent event) {
             event.getMapView().removeMouseListener(adapter);
-            MapView.removeZoomChangeListener(AbstractTileSourceLayer.this);
+            NavigatableComponent.removeZoomChangeListener(AbstractTileSourceLayer.this);
             super.detachFromMapView(event);
             if (memory != null) {
